回调到不同模型中的方法

时间:2011-03-12 03:27:36

标签: ruby-on-rails callback

我有模特组,会员和用户。连接has_many:通过关联。 路由方面,成员资格嵌套在组内。

我想要的是,无论何时有人加入或离开该组(即创建或销毁成员资格),都要启动对该组的检查以检查主导语言是什么(这是用户模型中的属性)和更新组模型中的语言属性。

我在Group模型中有一个名为define_language的方法,它似乎独立工作。

现在我需要从Membership模型调用这个方法,我想用 after_save回调来做这个,但是我很难将它引用到(不同)小组模型

我把这个方法放在Group模型而不是Membership模型中,因为我觉得它在语义上与成员关系没什么关系。这个假设是错的吗?我如何以有效的方式解决这个问题?

2 个答案:

答案 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}"