我有3个相关的模型:
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 :(得分:0)
当您使用控制器中的find方法时,您可以这样做:
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}"
必须找到用户所属的所有组的图库。
答案 1 :(得分:0)
我希望不在Sebes建议的控制器中定义它,而是在User
模型中。
调整他的想法:
def galleries
Gallery.joins(:groups => :users).where("users.id = ?", self.id)
end
然后获取current_user
对象的库的集合:
current_user.galleries