如何通过vs has_many指定has_many

时间:2014-09-24 23:03:14

标签: ruby-on-rails-4 has-many-through has-many

所以我试图弄清楚如何在基于has_many和has_many:通过关联调用对象的所有实例之间进行指定。我有用户,组和成员。成员模型是组和用户的配对。这些组在该模型中也有一个user_id。所以看到代码后这会更有意义:

用户模型

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :groups
  has_many :groups, :through => :members
end

组模型

class Group < ActiveRecord::Base
    has_many :users, :through => :members
    belongs_to :user
end

会员模型

class Member < ActiveRecord::Base
  belongs_to :groups
  belongs_to :users
end

索引视图

<!--these are the groups I own (the group.user_id is my id) NEEDS EDITING-->
  <% @groups.each do |group| %>
      <%= link_to group.title, group_path(group) %>
      <%= truncate group.desc %>
  <% end %>

<!--I'm a member of these groups (connected through the member model) NEEDS EDITING'-->
  <% current_user.groups.order(:created_at).each do |group| %>
      <%= link_to group.title, group_path(group) %>
      <%= truncate group.desc %>
  <% end %>

我正试图弄清楚如何在索引视图中调用不同类型的关联用户和组。

我想获得一个列表,其中包含我列为admin(group.user_id)的所有组,然后我想获得我所属的所有组的单独列表(通过成员模型)

我知道我可以通过查找或调用来查询它。但是,我希望有一个像current_user.groups这样的简单方法。不管怎样,谢谢!

1 个答案:

答案 0 :(得分:1)

我会考虑将1:N关系称为另一个名称。所以你最终会得到像

这样的东西
class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :owned_groups, class_name: 'Group'
  has_many :groups, :through => :members
end

所以索引视图看起来像:

<% current_user.owned_groups.each do |group| %>
    <%= link_to group.title, group_path(group) %>
    <%= truncate group.desc %>
<% end %>


<% current_user.groups.order(:created_at).each do |group| %>
    <%= link_to group.title, group_path(group) %>
    <%= truncate group.desc %>
<% end %>