2 つのモデルがあり、1 つは別のモデルに属していますが、それらを適切に保存できないようです。build
問題は、モデルでメソッドを使用すると、メモリ内でモデルが互いに割り当てられないため.save
、親を呼び出そうとすると、子に親の ID が設定されていないという事実に起因します。そして失敗します。
親モデルは次のとおりです。
# id int(11)
# execution_id int(11)
# macro_type_id int(11)
# macro_key_id int(11)
# created_at datetime
# updated_at datetime
class ExecutionMacro < ActiveRecord::Base
belongs_to :execution
belongs_to :macro_type
belongs_to :macro_key
has_one :advertisement_execution, :dependent => :destroy
accepts_nested_attributes_for :advertisement_execution
attr_accessible :macro_key_id, :macro_type_id, :advertisement_execution_attributes
validates :execution, :presence => true
validates :macro_type, :presence => true
validates :macro_key, :presence => true
end
これが子供です:
# id int(11)
# advertisement_id int(11)
# execution_macro_id int(11)
# advertisement_version_id int(11)
# created_at datetime
# updated_at datetime
# deleted_at datetime
class AdvertisementExecution < ActiveRecord::Base
belongs_to :advertisement
belongs_to :advertisement_version
belongs_to :execution_macro
attr_accessible :advertisement_id, :advertisement_version_id, :execution_macro_id
validates :execution_macro, :presence => true
validates :advertisement, :presence => true
validates :advertisement_version, :presence => true
end
したがって、次のコードを試してみると:
@execution = Execution.find(1)
@em = @execution.execution_macros.build(:macro_type_id => 1, :macro_key_id => 1)
@ae = @em.build_advertisement_execution(:advertisement_id => 1, :advertisement_version_id => 1)
if @em.save
"do something"
else
"throw an error"
end
「Advertisement Execution: Execution Macro can't be blank.」というメッセージが表示され、保存に失敗します。
これはそれほど難しいことではないように感じます。私は何が欠けていますか?