我试图在setter方法中调用association_id(在我的情况下为site_id)属性,但是当使用has_many关系创建对象时,我得到nil。
网站有许多域,还有一个primary_domain。主域由primary_id属性确定。给定站点的所有域都具有相同的primary_id。
我的域类:
class Domain < ActiveRecord::Base
belongs_to :site
def is_primary=(bool)
if bool
self.save if !self.id.present?
Domain.where(site_id: self.site_id).update_all(primary_id: self.id)
end
true
end
end
我想做的是:
@site.domains.create(domain: "www.example.com", is_primary: true)
当我在self.site_id
setter方法中调用is_primary=
时,它返回nil。我似乎无法在setter方法中获得self.site_id,因为它没有明确指定。当然,我可以自己明确设置属性,但我觉得我错过了一些东西。我认为这应该是可能的,关于关系和Activerecord查询的rails约定以及所有。
那么,关于如何在此设置中获取site_id属性的任何想法?
答案 0 :(得分:2)
混淆create
的保存过程,中途打断它(通过在其中间调用save
)并不是一个好主意。
只需回电:
class Domain < ActiveRecord::Base
belongs_to :site
attr_accessor :is_primary
after_commit :set_primary, if: :is_primary
def set_primary
Domain.where(site_id: self.site_id).update_all(primary_id: self.id)
end
end