Reputation: 21288
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'
The project controller:
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
The project model:
class Project < ActiveRecord::Base
has_and_belongs_to_many :users
belongs_to :ticket
attr_accessible :user_id, :title, :description, :start_date, :end_date
end
The view for new project:
<%= 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 %>
The db models:
Project:
- id: int
- user_id: int
- title: varchar(50)
- description: varchar(500)
- start_date: date
- end_date: date
- created_at: datetime
- updated_at: datetime
Request parameters that are sent:
{"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"}
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!
Upvotes: 2
Views: 9992
Reputation: 298
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
Try printing the @project object and see what values its using for its creation
you should use save! rather than save
Hope it helps..
:)
Upvotes: 5
Reputation: 19145
What indexes do you have on your table? You're either violating a non-null constraint (missing data) or a uniqueness constraint (duplicated data in record being inserted).
Upvotes: 4