0
我無法讓create_association(attributes = {})方法在Rails中爲相關模型工作。如何在ruby-on-rails中使用create_association
class Gwgiftwhip < ActiveRecord::Base
has_one :gift, :autosave => true, :dependent => :destroy
validates :gift, :presence => true
end
class Gift < ActiveRecord::Base
belongs_to :gwgiftwhip
end
的belongs_to section in the Active Record Associations Guide建議你應該能夠使用的方法:create_association(屬性= {})創建相關模型,並使用belongs_to的關聯時保存。但是,由於相關模型參數'gift'未設置,下面的實現會導致保存錯誤。
class GiftsController < ApplicationController
...
def inbound
@gift = Gift.new(params.slice(*Gift.new.acceptable))
if @gift.create_gwgiftwhip({:user_id => @gift.user_id}, :without_protection => true)
...
end
end
下面的工作,但似乎是超出預期的用途。它正在創建一個相關模型,然後將其設置爲相關模型。這需要另一步然後保存。
class GiftsController < ApplicationController
...
def inbound
@gift = Gift.new(params.slice(*Gift.new.acceptable))
@gift.create_gwgiftwhip({:user_id => @gift.user_id}, :without_protection => true).gift = @gift
if @gift.gwgiftwhip.save
...
end
end
謝謝。它看起來像.create()將返回新的對象,無論驗證傳遞,所以實際上添加(不)new_record? Gwgiftwhip.create({:user_id => @ gift.user_id,:gift => @gift},::without_protection => true).new_record?' –
此外,有關重寫相關模型的setter方法。它工作得很好。對於其他用例,user_id需要是current_user,因此我可能會在其他地方使用您的建議。 –