2010-08-02 3 views
1

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

<%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_path и new_employee_path metho ds, которые генерируются с помощью помощников маршрутизации в config/routes.rb. Вы можете узнать больше о маршрутизации, прочитав the Routing from the Outside In guide.

+3

Я, конечно, не фанат, если с другой. Как насчет использования 'if group.employees.present?'. Вызов #представляет? на пустом массиве в консоли появляется false. – dylanfm

+0

@dylanfm: Вы делаете замечательный момент, и я обновил ответ, чтобы показать это. –

1

У вас есть ветка if-else (два возможных разных результата), поэтому использование unless потребует, чтобы вы изменили ее на ветку if-else, которую трудно понять. Если-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 вне если заявления. Я бы никогда не использовал, если только с другим, и, конечно же, не использовать «рельсы» для использования, если только.

1

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

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

затем на ваш взгляд

<%= foo %> 
Смежные вопросы