2017-08-12 18 views
0

質問は本当に簡単です。 、私のスキーマを見てみてください。before_actionとモデルのネストされた属性

class Parent < ApplicationRecord 
    has_one :item 

    accepts_nested_attributes_for :item 
    before_create :set_something 

    def set_something 
    self.item.build 
    end 
end 

class Item < ApplicationRecord 
    belongs_to :parent 
end 

質問は:親を作成するときに、なぜそれをしない

ActiveRecord::Schema.define(version: 20170812094528) do 

    create_table "items", force: :cascade do |t| 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "parent_id" 
    end 

    create_table "parents", force: :cascade do |t| 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "item_id" 
    end 

end 

これは、モデルがどのように見えるかです次のエラーが発生しますか?

undefined method `build' for nil:NilClass 

親を作成すると同時にアイテムレコードを追加できるように設定するにはどうすればよいですか?

答えて

1

def set_something 
    build_item 
end 

モデル親has_one :itemを使用してみてください。 Railsでは、has_oneアソシエーションは、build_association(attributes = {})ヘルパーメソッドをオーナークラスに追加し、association.build(attributes = {})ではなく追加します。これが原因で、エラーundefined method 'build' for nil:NilClassが発生しています。

has_one関連付けの詳細については、has_one documentationを参照してください。

+0

それはそれです!どうもありがとうございました! 「アイテム」テーブルでは、新しいレコードに適切な「user_id」値が追加されます。もう1つの質問です: "親"テーブルで、私の新しいレコードはitem_id = nill値です。私は "parent"テーブルでこのitem_idカラムが必要なのか不思議です。どう思いますか?この問題を解決する簡単な方法はありますか? – Kaczor

+0

なぜ親テーブルにitem_idが必要です アイテムオブジェクトを使用して親オブジェクトを取得することができます @ Item.parent –

関連する問題