2013-03-26 25 views
2

在Rails 3.2中,我一直在尋找一種方法來遍歷before_add回調中對象的關聯。在Rails 3中訪問before_add回調中的關聯

所以基本上我的使用情況是:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :meetings 
end 

class Meeting < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_many :comments, :before_add => :set_owner_id 
end 

class Comment < ActiveRecord::Base 
    belongs_to :meeting 
end 

def set_owner_id(child) 
    child.owner_id = <<<THE USER ID for @user >>> 
end 

和我創建一個用戶的上下文中的註釋:

@user.meetings.first.comments.create 

如何遍歷協會從before_add回調中發現@user的ID?我想在模型級別設置它。我一直在尋找proxy_association,但我可能會錯過一些東西。有任何想法嗎?

+1

它也implossible從您正在尋找這樣那樣的穿越使得其很難用戶開會就知道了。你不能說self.metting.user,因爲用戶擁有並且屬於許多會議,這意味着你可以在不知道id的情況下從會議中獲得特定用戶。 – 2013-03-26 16:29:44

回答

1

您應該在會議的背景下創建評論,否?無論哪種方式,您都應該在控制器中處理這個問題,因爲您無法訪問模型中的@user。

@comment = Meeting.find(id).comments.create(owner_id: @user, ...) 

但如果你堅持自己的方式,這樣做:

@comment = @user.meetings.first.comments.create(owner_id: @user.id) 
+0

我的問題是關於模型層。很明顯,如果我想從相關的控制器中設置這些參數,但這並不涉及我的問題(before_add回調中的關聯遍歷)。 – i0n 2013-03-26 16:10:37

+1

@iOn模型不知道你的會話,所以他們不知道'@ user'。這是數據層與演示應用程序層的有意解耦。您的會話存在於視圖和控制器中,但從不存在模型。 – 2013-03-26 16:22:57

+0

我知道這一點。請看實際的問題。 – i0n 2013-03-26 17:12:20