2011-03-12 56 views
5

我有模型組,成員和用戶。通過關聯與has_many關聯。 路由明智,成員嵌套在組內。回調方法在不同的模型

我想要的是,無論何時有人加入或離開組(即創建或銷燬成員資格),都要啓動對該組的檢查以檢查主導語言是什麼(這是用戶模型中的一個屬性)並更新組模型中的語言屬性。

我有一個稱爲define_language在組模型中似乎獨立工作的方法。

現在我需要從會員制模式調用這個方法,我在想這樣做有after_save的回調,但我無法在(不同)組模式它引用的方法。

我把這個方法放在Group模型中,而不是Membership模型,因爲我覺得它的語義上與成員關係不大。這個假設是錯誤的嗎?我如何以有效的方式解決這個問題?

回答

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 

問題在於,belongs_to僅在第一次加載rails時由Ruby進行評估。

+0

這個答案適合我!謝謝 – SupremeA 2015-09-14 18:30:10

1

我想通了,你只是在Membership.rb

before_save group.define_language 

而且tadaa跑!它將在Group.rb模型中調用define_language。

可選,您可以添加這樣定義的關係:

before_save group.define_language "id = #{group_id}" 
+0

這是不正確的,它會拋出錯誤「未定義的局部變量或方法組」,並且您不能在回調中調用self.group,因此您需要將該調用包裝在方法中,就像從@ cmrichards – rmcsharry 2017-11-20 19:52:21