рельсы способ сделать, если / еще логика - PullRequest
1 голос
/ 02 августа 2010

У меня есть следующий код, который, кажется, работает нормально:

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

5 голосов
/ 02 августа 2010

Я бы (с советом 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_path и new_employee_path, которые генерируются с помощью помощников маршрутизации в config / rout.rb . Вы можете узнать больше о маршрутизации, прочитав Маршрутизация из руководства извне .

2 голосов
/ 02 августа 2010

Я считаю, что его невозможно прочитать, кроме как с другими.Было бы лучше придерживаться того, что у вас есть.

1 голос
/ 02 августа 2010

Вы можете использовать helper и content_tag для генерации html вместо уродливой грамматики erb.

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

тогда, по вашему мнению

<%= foo %>
1 голос
/ 02 августа 2010

Вы можете попробовать так:

<% 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 %>
1 голос
/ 02 августа 2010

У вас есть ветвь if-else (два возможных разных результата), поэтому использование unless потребует от вас изменить его на ветвь if-else, что трудно понять.Если в этой ситуации есть выход, то если 100% * Если бы у вас было только одно условие, то есть

if foo != 0
   do_something(bar)
end

Это можно переписать как

do_something(bar) unless foo == 0
0 голосов
/ 02 августа 2010

Путь Тумту - лучший, но я бы даже поставил тэги td вне операторов if.Я бы никогда не использовал, если не с другими, и, конечно, это не «рельсовый способ», если только.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...