rails做if / else逻辑的方式

时间:2010-08-02 03:32:27

标签: ruby-on-rails

我有以下代码似乎工作正常:

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

我只是想知道如何以更友好的方式使用除非?

6 个答案:

答案 0 :(得分: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方法,这些方法是使用 config / routes.rb 中的路由助手生成的。您可以阅读the Routing from the Outside In guide了解有关路由的更多信息。

答案 1 :(得分:2)

我认为除非使用else,否则使用它是不可读的。坚持你拥有的东西会更好。

答案 2 :(得分:1)

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

如果您只有一个条件,即

if foo != 0
   do_something(bar)
end

可以改写为

do_something(bar) unless foo == 0

答案 3 :(得分: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 %>

答案 4 :(得分:1)

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

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

然后在你看来

<%= foo %>

答案 5 :(得分:0)

Tumtu的方式是最好的,但我甚至会将td标签放在if语句之外。除非与其他人一起使用,否则我永远不会使用,当然不是“轨道方式”,除非。