可以在Rails 3中链接查询吗?

时间:2011-06-29 22:10:48

标签: ruby-on-rails-3 activerecord

我有类似以下的内容

class Group < ActiveRecord::Base
has_many :group_users
end

class GroupUser < ActiveRecord::Base
  belongs_to :user, :group
end

class User < ActiveRecord::Base
has_many :group_users
end

我没有使用has_many_through的原因是因为group_user类拥有的信息多于链接表,所以我希望能够访问这些值。

我想做的是将@groups传递给页面并循环遍历组用户,但同时获取用户对象

所以

<% @groups.each do |group| %>
    <%= group.group_user.user.name %>
<% end %>

2 个答案:

答案 0 :(得分:0)

我将如何做到这一点:

用户模型

class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups, :through => :memberships
end

群组模型

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
end

会员资格模式

class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

<强>控制器

def show
  @groups = Group.all
end

查看

<% @groups.each do |group| %>
  <% group.users.each do |user| %>
    <%= user.name %> 
  <% end %>
<% end %>

可能有几种方法可以做到,但这应该让你开始。

希望这有帮助!

答案 1 :(得分:0)

如果要从GroupUser模型访问属性,请执行以下操作:

<% @groups.each do |group| %>

   <% group.group_users.each do |group_user| %>
     <%= group_user.attribute_name %> 
     <%= group_user.user.name
  <% end %> 
<% end %>

要从SQL方面提高效率,可以使用预先加载:

Group.all(:includes => [:group_users => :user])

˚F