условно исключить поля из формы рельсов - PullRequest
2 голосов
/ 21 октября 2011

Функциональность, которую я хочу достичь с помощью этого, состоит в том, чтобы иметь различные поля в зависимости от действия, в котором находится пользователь.

Универсальный скаффолд связывает форму в частичную и отображает ее в действиях new и edit .В типичном случае регистрации может не потребоваться обновлять пароль каждый раз, когда обновляется профиль.Один из способов, который я использовал для решения этой проблемы в прошлом, - это создание отдельных форм для new и edit ;включая пароль только в новом.Очевидно, что большинство полей повторяются.Есть ли способ сохранить частичное, но пропустить (тем самым не обновляя) некоторые поля в форме для каждого действия?

Ответы [ 3 ]

6 голосов
/ 21 октября 2011

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

def new 
  @user = User.new 
  .....
end 

def edit
  @user = User.find(params[:id])
  ....
end 

В форме частичного использования

<% if @user.new_record? %>
 <%= f.field_type :field_name %>
<% end %>

Это не будет отображать поле во время редактирования / обновления.

0 голосов
/ 21 октября 2011

Вы можете проверить, является ли объект активной записи, передаваемый в представление (например, @user), новой или старой записью, используя метод 'new_record?'. Исходя из этого, вы можете решить, какие поля вы хотите отобразить. В качестве альтернативы, вы также можете иметь частичное, а затем передать ему некоторое значение (скорее всего, логическое), и на основе этого значения вы можете решить, какие поля отображать. Это можно сделать так: render: частичный => 'частичное_имя',: locals => {: bool => true}

А потом по частям делай

<% if bool == true %>
 <%= f.xyz_tag :name %> //whatever field you want
<% end %>
0 голосов
/ 21 октября 2011

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

<% if params[:action] == "new" %>
   <%= f.field_type :field_name %>
<% end %>

Но вы должны подумать о безопасности, потому что это не мешает злоумышленникам добавлять поля POST вручную для записи в поля, которые не отображаются как поля наВы формируете!

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