Ruby on rails 3 Rails通过HABTM向另一个资源添加资源id

Ruby on rails 3 Rails通过HABTM向另一个资源添加资源id,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我有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 我希望

我有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协会)的图库

我很难对控制器的工作原理进行概念化,也许我对这个问题考虑得太多了。如果我创建一个组,然后创建一个用户,那么将当前组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) %>
然后在我的表单中使用隐藏字段,将组id分配给组id隐藏字段:

<%= hidden_field_tag :group_id, params[:group_id] %>
最后,在我的创建方法中,在保存之前添加这些行可以完美地分配组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])

我仍然需要坐下来,仔细思考你们提供的答案。非常感谢你抽出时间来帮助我。我真的很感激

当您使用控制器中的“查找”方法时,您可以如下所示:

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}"
它必须找到用户所属的所有组库

我不会像Sebes建议的那样在控制器中定义,而是在用户模型中定义

调整他的想法:

def galleries
  Gallery.joins(:groups => :users).where("users.id = ?", self.id)
end
然后,要获取当前用户对象的库集合,请执行以下操作:

current_user.galleries