2012-01-16 60 views
0

加入我有类似您在查看

<% @users.each do |u| %> 
    ... 
    <% @interests.each do |i| %> 
    <% if i joins u in interests_users %> <-- That is not working that way! = Problem 
     ... 
     <% i.id %> 
     ... 
    <% end %> 
    <% end %> 
    ... 
<% end %> 

我需要输出的每个息的ID加入用户interests_users为每一位用户。但我不能为每个用户使用一个sql查询,因为这对于服务器来说太多了,所以我查询了整个兴趣表并想在视图中对其进行过滤。 任何人都有一个简单的解决方案呢?

+0

您能定义更多的问题吗?你想达到什么目的? – 2012-01-16 09:07:55

回答

0

你也在考虑这个太过以观为中心 - 这是一个数据问题,所以模型应该照顾它。

我猜你在用户和兴趣之间有一个n-m关系,兴趣 - 用户在中间连接表。模型应该定义如下关系:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :interests 
end 

class Interest ... 
    has_and_belongs_to_many :users 
end 

这与has_and_belongs_to_many(HABTM)有关。该机型已经再照顾“选择”的,其利益“的”每一个用户,只需用user_instance.interests对它们进行查询,即做

<% @users.each do |u| %> 
    ... 
    <% u.interests.each do |i| %> 

如果为每个用户利益产生的查询,你可以渴望让用户在加载数据:

@users = User.includes(:interests).all 

编辑:

哦,是的,如果你想列出所有的利益和标记那些用户相关联的,这样的事情应该工作:

@interests.each do |interest| 
    if u.interests.include?(interest) ... 
+0

这确实很简单。没有考虑在相关变量之后使用.each:/ * facepalm * – Nikom 2012-01-16 10:15:18

+0

非常感谢! :) – Nikom 2012-01-16 10:15:43