2010-02-07 219 views
1

我有我需要窝在另一个块的块。或者,也许我不和我这样做完全错误的。 有一个单元,该单元的has_many COMPANIES 这时企业的has_many USERSRuby on Rails的嵌套块

单位展示页面我试图做这样的事情上:

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

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

即用户是: CC = @ user.find(:所有,:条件=> [ “?位置=”, “公司指挥官”])

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

很抱歉,如果我没有解释这方面做得很差。我不确定这是否是正确的做法。

在此先感谢。

回答

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 %> 
+0

感谢named_scope是一个好主意。所以现在我有下面的内容(如果我没有一个拥有该位置的用户,那么if..else会覆盖),但是添加该范围并不会显示任何内容。任何想法为什么? \t

\t <%@ company.each做| C | %> \t <%= h(c。名称)%>
\t <%if c.users.company_commanders.nil? %> \t \t <%=的link_to “将此用户添加”,new_user_path%>
\t <% else %> \t \t <%c.users.company_commanders.each做| U | %> \t \t

名称:<%= H(u.name)%>

\t <% end %> \t <% end %> \t <% end %> \t

looloobs 2010-02-07 23:32:43

+0

对不起,这不是非常有帮助把在评论,但是只要我问了我解决它的问题,我把它写在答案中。再次感谢您提醒我named_scopes。 – looloobs 2010-02-07 23:37:01

+0

使用空?而不是零?如果未找到结果,则命名范围将返回空列表。哪个是返回错误零? – EmFi 2010-02-08 01:43:20

0

如果一个公司拥有众多的用户,那么你应该能够只是做“company.users”,以获得与该公司相关联的用户列表。那么你可以循环或列出那些你喜欢的东西。

假设你建立你的模型之间的关系,这是多么的活动记录建立这些协会为您服务。

2

试试这个:

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