2

Ruby on Rails を学習しようとしていますが、助けが必要な問題が発生しました。私がやろうとしているのは、フォームを使用して「プロジェクトマネージャー」を作成することですが、フォームに入力して送信をクリックすると、次のエラーが表示されます。

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行目で発生します。シードでプロジェクトを作成すると、うまくいきます!

4

2 に答える 2

5

プロジェクト モデルまたはプロジェクト テーブル (schema.rb ファイルで確認できます) でいくつかの検証が失敗している可能性があります。

または、モデルからすべての属性を削除し、オブジェクトを作成しようとすることで、プロジェクトモデルの作成を段階的にチェックすることができます

@project オブジェクトを印刷してみて、その作成に使用されている値を確認してください

あなたは保存を使用する必要があります!節約するのではなく

それが役に立てば幸い..

:)

于 2013-02-08T13:46:27.457 に答える
4

テーブルにはどのようなインデックスがありますか? null 以外の制約 (データが欠落している) または一意性制約 (レコードに重複データが挿入されている) に違反しています。

于 2013-02-07T20:53:36.233 に答える