2010-08-02 47 views
1

我有下面的代码,这似乎很好地工作的方式:轨做的if/else逻辑

<%if group.employees.count > 0%> 
    <td><%= link_to group.employees.count.to_s, {:action => 'index', :controller => 'employees'}, {:id=>group.id}%></td> 
    <%else%> 
    <td><%= link_to "Add Employee", {:action => 'new', :controller => 'employees'}%></td>   
    <%end%> 

我只是想知道如何能更轨写入使用友好的方式,除非?

回答

5

我会(在评论dylanfm的建议下)写这样的:

<% if group.employees.present? %> 
    <td><%= link_to group.employees.count.to_s, employees_path, { :id=> "group_#{group.id}" }%></td> 
<% else %> 
    <td><%= link_to "Add Employee", new_employee_path %></td>   
<% end %> 

这里我用employees_pathnew_employee_path方法ds通过使用路由助手在config/routes.rb中生成。您可以阅读the Routing from the Outside In guide以了解有关路由的更多信息。

+3

我肯定不是一个球迷,除非有别的。如果使用'group.employees.present?',怎么办?调用#present?在控制台的空数组上显示返回false。 – dylanfm 2010-08-02 10:18:11

+0

@dylanfm:你说得很好,我已经更新了答案来证明这一点。 – 2010-08-02 11:28:58

1

您有一个if-else分支(两种可能的不同结果),因此使用unless将要求您将其更改为一个很难理解的except-else分支。如果在这种情况下还有其他方法可行。

如果你只有一个条件,即

if foo != 0 
    do_something(bar) 
end 

它可以被改写为

do_something(bar) unless foo == 0 
2

我认为这是不可读的使用,除非与其他。坚持你拥有的东西会更好。

1

你可以试试这个方法:

<% if group.employees.any? %> 
<td><%= link_to group.employees.count, employees_path, { :id=> dom_id(group) } %></td> 
<% else %> 
    <td><%= link_to "Add Employee", new_employee_path %></td>   
<% end %> 
0

Tumtu的方式是最好的,但我甚至会把TD标签的if语句之外。除非另有其他规定,否则我绝对不会使用它,并且肯定不是使用“rails方法”。

1

您可以使用helper和content_tag来生成html而不是丑陋的erb语法。

 
def foo 
    if group.employees.count > 0 
     content_tag(...) 
    else 
     content_tag(...) 
    end 
end 

那么在你看来

<%= foo %>