holyredbeard
holyredbeard

Reputation: 21288

SQLite3::ConstraintException: constraint failed:

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

Answers (2)

balaji
balaji

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

Winfield
Winfield

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

Related Questions