Ruby on Rails嵌套块

时间:2010-02-07 18:13:47

标签: ruby-on-rails loops

我有一个块我需要嵌套另一个块。或者我可能没有,我这样做完全错了。 有一个UNIT和UNIT有很多公司 然后公司有很多用户

在UNIT节目页面上我试图做这样的事情:

<% @company.each do |c|%>
 <%= c.name %>
  <% ??? each do |f| %>
   <p>
   Name: <%= f.name %>
      </p>
<% end %>
<% end %>

所以基本上对于每个公司我都会显示公司的名称,没有问题,但是我试图表明在每个公司内都有我列出的属于该公司的特定用户。我无法在控制器中定义,因为有多家公司。

该用户是: cc = @ user.find(:all,:conditions =&gt; [“position =?”,“公司指挥官”])

我不确定如何为每个公司循环,然后为该公司循环并列出该公司的特定用户。

很抱歉,如果我解释这个问题做得很差。我不确定这是否是正确的做法。

提前致谢。

5 个答案:

答案 0 :(得分:2)

试试这个:

<% @company.each do |c| %>
  <%= h(c.name) %>
  <% c.users.each do |u| %>
    <p>Name: <%= h(u.name) %></p>
  <% end %>
<% end %>

答案 1 :(得分:1)

首先,您需要在模型中定义关系:

# Unit model
has_many :companies
has_many :users, :through => :companies

# Company model
has_many :users
belongs_to :unit

...

比你的单位控制器:

@unit = Unit.find(params[:id]) # or something similar

在你看来:

<% @unit.companies.each do |c|%>
 <%= c.name %>
  <% c.users each do |f| %>
   <p>
     Name: <%= f.name %>
   </p>
  <% end %>
<% end %>

答案 2 :(得分:0)

如果公司有很多用户,那么您应该只需要'company.users'来获取与该公司关联的用户列表。然后你可以循环或列出你喜欢的那些。

假设您在模型中设置关系,这就是活动记录为您设置这些关联的方式。

答案 3 :(得分:0)

您似乎希望列出与每家公司关联的“公司指挥官”位置的用户。

也许用户的命名范围会有所帮助:

class User < ActiveRecord::Base
  ...
  named_scope :company_commanders, :conditions => "position = 'Company Commander'"
end

现在,您可以根据需要循环浏览它们。

<% @company.each do |c|%>
 <%= c.name %>
 <% c.users.company_commanders each do |f| %>
   <p>
     Name: <%= f.name %>
   </p>
 <% end %>
<% end %>

答案 4 :(得分:0)

这就是最终的工作:

named_scope :company_commanders, :conditions =>{:position => 'Company Commander'}

<% @company.each do |c| %>
  <%= h(c.name) %><br />
  <% if c.users.company_commanders.blank? %>
    <%= link_to "Add this User", new_user_path %><br />
  <% else %>
    <% c.users.company_commanders.each do |u| %>
        <p>Name: <%= h(u.name) %></p>
    <% end %>
  <% end %>
<% end %>
</p>