我有模特组,会员和用户。连接has_many:通过关联。 路由方面,成员资格嵌套在组内。
我想要的是,无论何时有人加入或离开该组(即创建或销毁成员资格),都要启动对该组的检查以检查主导语言是什么(这是用户模型中的属性)和更新组模型中的语言属性。
我在Group模型中有一个名为define_language的方法,它似乎独立工作。
现在我需要从Membership模型调用这个方法,我想用 after_save回调来做这个,但是我很难将它引用到(不同)小组模型。
我把这个方法放在Group模型而不是Membership模型中,因为我觉得它在语义上与成员关系没什么关系。这个假设是错的吗?我如何以有效的方式解决这个问题?
答案 0 :(得分:2)
一种方法是:
class Membership < ActiveRecord::Base
belongs_to :group
before_save :update_group_language
...
private
def update_group_language
self.group.define_language
end
end
我无法看到它如何起作用:
class Membership < ActiveRecord::Base
belongs_to :group
before_save group.define_language
end
问题在于,首次加载rails时,belongs_to仅由Ruby评估。
答案 1 :(得分:1)
我想通了,你只需要在Membership.rb中运行
before_save group.define_language
tadaa!它将在Group.rb模型中调用define_language。
可选您可以添加以定义关系:
before_save group.define_language "id = #{group_id}"