Ruby on rails 3 Rails通过HABTM向另一个资源添加资源id
我有3个相关模型: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 我希望
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