#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? %>
Может быть, вам следует написать отдельный метод с более удобочитаемым именем и заменить это условие одним методом. Постарайтесь сделать ваше представление как можно более чистым