說我有兩個班,使用ActiveRecord執行此操作的正確方法?
形象和信用
class Image < ActiveRecord::Base
belongs_to :credit
accepts_nested_attributes_for :credit
end
class Credit < ActiveRecord::Base
#has a field called name
has_many :images
end
我希望有一個信貸創建圖像時,關聯作用有點像一個標籤。從本質上講,我希望像Credit.find_or_create_by_name這樣的行爲,但是在使用Credit的客戶端代碼中,如果它只是一個Create,它會更清潔。我似乎無法找到一種方法將其烘焙到模型中。當你創建一個圖像,你可以做什麼
class Image < ActiveRecord::Base
belongs_to :credit
attr_accessor :credit_name
after_create { Credit.associate_object(self) }
end
class Credit < ActiveRecord::Base
#has a field called name
has_many :images
def self.associate_object(object, association='images')
credit = self.find_or_create_by_name(object.credit_name)
credit.send(association) << object
credit.save
end
末
然後是像
Image.create(:attr1 => 'value1', :attr2 => 'value2', ..., :credit_name => 'some_name')
,它會帶你送入名稱:
「信用」就像電影上的信用(歸屬),而不是賬戶上的信用(付款),對嗎? – jefflunt 2012-02-02 19:20:47
是的,對不起。在新聞編輯室工作2.5年,扭曲了我的行話。 – 2012-02-02 19:22:57