SQLite3 :: ConstraintException:约束失败:

问题描述:

我正在尝试学习Ruby on Rails,并且遇到了需要帮助的问题。我想做的是使用表单创建项目经理,但是当我填写表单并单击提交后,显示以下错误:

I'm trying to learn Ruby on Rails and have encountered a problem I need help with. What I'm trying to do is to create a "project manager" with a form, but whne I'm filled in the form and clicks submit the following error is shown:

ActiveRecord::StatementInvalid in ProjectsController#create

SQLite3::ConstraintException: constraint failed: INSERT INTO "projects" ("created_at", "description", "end_date", "start_date", "title", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?, ?)

Rails.root: /Applications/XAMPP/xamppfiles/htdocs/IDV450-labb1

Application Trace | Framework Trace | Full Trace
app/controllers/projects_controller.rb:14:in `create'

项目负责人:

1.   class ProjectsController < ApplicationController
2.
3.      def index
4.        @projects = Project.all
5.      end
6.
7.      def new
8.        @project = Project.new
9.      end
10.
11.     def create
12.       @project = Project.new(params[:project].merge(:user_id => current_user.id))
13.
14.       if @project.save
15.         redirect_to projects_path
16.       else
17.         render :action => "new"
18.       end
19.     end
20.   end

项目模型:

class Project < ActiveRecord::Base
    has_and_belongs_to_many :users
    belongs_to :ticket

    attr_accessible :user_id, :title, :description, :start_date, :end_date
end

新项目的视图:

<%= form_for @project do |f| %>
    <div class="text_field">
        <%= f.label :title%>
        <%= f.text_field :title%>
    </div>
    <div class="text_field">
        <%= f.label :description%>
        <%= f.text_field :description%>
    </div>
    <div class="dropdown">
        <%= f.label :start_date%>
        <%= date_select :start_date, :startdate %>
    </div>
    <div class="dropdown">
        <%= f.label :end_date%>
        <%= date_select :end_date, :enddate %>
    </div>
    <div class="select">
        <%= f.label :title%>
    </div>
    <div class="submit">
        <%= f.submit "Save" %>
    </div>
<% end %>

数据库模型:

Project:
    - id: int
    - user_id: int
    - title: varchar(50)
    - description: varchar(500)
    - start_date: date
    - end_date: date
    - created_at: datetime
    - updated_at: datetime

请求发送的参数:

{"utf8"=>"✓",
 "authenticity_token"=>"CrFUjpsRCEWRprSmKtOk4nBxsxrwaII1WKLDWMQWuUI=",
 "project"=>{"title"=>"Foo project",
 "description"=>"A little description"},
 "start_date"=>{"start_date(1i)"=>"2013",
 "start_date(2i)"=>"2",
 "start_date(3i)"=>"7"},
 "end_date"=>{"end_date(1i)"=>"2014",
 "end_date(2i)"=>"3",
 "end_date(3i)"=>"12"},
 "commit"=>"Spara"}

它确实没有说出问题所在,但是在第14行发生它尝试保存到数据库。如果我在种子中创建一个项目,那么它将起作用!

It really doesn't say what the problem is, but it happens on line 14 when it tries to save to the db. If I create a project in seed it works!

也许您对项目模型或项目表进行了验证(可以会出现在schema.rb文件中)

Maybe you have some validation on project model or in projects table(which can be seen in schema.rb file) which is failing

或者您可以尝试通过从模型中删除所有属性并尝试创建对象来逐步检查创建项目模型

Or You can try incrementally checking creating project model by removing all attributes from model and trying to create the object

尝试打印@project对象,并查看其用于创建的值

Try printing the @project object and see what values its using for its creation

您应该使用save!而不是保存

you should use save! rather than save

希望它会有所帮助。

:)