2011-09-22 65 views
0

增加資源ID另一個資源我有3種相關機型:的Rails通過HABTM

class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups 
end 

class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users 
has_many :galleries 
end 

class Gallery < ActiveRecord::Base 
    belongs_to :group 
end 

我希望能夠給一組中創建用戶和畫廊這樣只有誰是組成員的用戶可以查看屬於該組的畫廊。我也希望用戶能夠查看他們所屬的其他組的畫廊(因此是HABTM協會)。

我很難概念化它如何與控制器一起工作,也許我正在思考問題。如果我創建了一個組,然後我創建一個用戶,那麼將當前group_id添加到用戶模型的最佳方法是什麼?相同的東西去畫廊模型...

這是否有道理?

讓我知道是否需要澄清或添加代碼示例。

非常感謝您的幫助。

編輯:澄清 我在最初的問題中絕對沒有任何意義,但我確實設法在朋友的幫助下找到答案。

我最終什麼事做的是通過params哈希值傳遞GROUP_ID的形式,像這樣:

<%= link_to "Add User", new_admin_user_path(:group_id => @group.id) %> 
<%= link_to "Add Gallery", new_gallery_path(:group_id => @group.id) %> 

然後用我的形式隱藏字段,分配GROUP_ID的「GROUP_ID」隱藏字段:

<%= hidden_field_tag :group_id, params[:group_id] %> 

最後,在我的創建方法,加上幾行之前保存完美分配GROUP_ID:

# Gallery only has one group 
@gallery.group_id = params[:group_id] 
# Users can belong to many groups 
@user.groups << Group.find(params[:group_id]) 

我仍然需要坐下來,圍繞着你們提供的答案。非常感謝您花時間幫助我。對此,我真的非常感激。

回答

0

當您使用查找方法從你的控制器你可以把它像這樣:

Gallery.find :all, :joins => "INNER JOIN groups ON groups.gallery_id = galleries.id INNER JOIN users ON users.group_id = groups.id", :conditions => "users.id = #{@your_current_user_id}" 

它必須找到該用戶所屬組的所有畫廊。

0

我會不是在Sebes建議的控制器中定義這個,而是在User模型中。

適應了自己的想法:

def galleries 
    Gallery.joins(:groups => :users).where("users.id = ?", self.id) 
end 

然後拿到畫廊的集合爲current_user對象:

current_user.galleries