Как я могу использовать ключевое слово ‘unless’ в представлении?

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

Кто-нибудь может сказать мне, есть ли замена Rail3 для чего-то подобного:

 <%= unless @page.new_record? || !@page.background_image? %>

bla 

<% end %>
  

Я пытаюсь отобразить флажок в форме только при редактировании пользователем. Не при их создании.

Комментарии:

1. Этот код должен быть во вспомогательном представлении, а не в самом представлении. Или в модели.

Ответ №1:

Я думаю, что оператор в порядке, но его не следует включать в ваше представление. Вместо этого создайте метод модели, возможно, с именем is_editable? или что-то, что включает в себя это утверждение. Затем получите переменную экземпляра в вашем контроллере и используйте ее вместо этого.

Логика в представлениях — очень плохая идея 🙂

Ответ №2:

Ваша ошибка заключается в том, что вы включили = в код ruby.

 <% unless @page.new_record? || !@page.background_image? %>

  bla 

<% end %>
  

Однако, как заявили другие пользователи, вероятно, лучше скрыть эту логику в модели, а не в представлении. Кроме того, было сочтено лучшей практикой использовать только unless, если существует только один логический оператор. Становится все труднее и труднее читать, когда у вас там есть «или» и «нет».

 <% if @page.is_editable %>
  blah
<% end %>
  

Это была бы более приятная версия, и даже лучше, чем эта (в зависимости от того, насколько сложным является «вздор»), было бы скрыть все это во вспомогательном методе.

 <%= some_special_checkbox(f) %>
  

Параметр f будет объектом form, чтобы ваш помощник мог отобразить флажок для формы.

Ответ №3:

Вы можете написать это следующим образом:

 <%= "bla" unless @page.new_record? || !@page.background_image? %>
  

Может быть, вам следует написать отдельный метод с более удобочитаемым именем и заменить это условие одним методом. Постарайтесь сделать ваше представление как можно более чистым