СУХАЯ форма частичная для создания и обновления - PullRequest
5 голосов
/ 22 сентября 2009

У меня есть часть формы _form.html.erb, которая помогает СУШИТЬ мой код, но мне нужно, чтобы форма имела разные метки в зависимости от того, создаю ли я нового пользователя или обновляю существующего.

Вот моя частичная форма. Мне не нужно показывать флажок eula во время обновления, а также мне нужно заменить текст кнопки «Создать мою учетную запись» на что-то более подходящее при обновлении.

<% form_for @user do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name, 'Full name' %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :username %><br />
    <%= f.text_field :username %>
  </p>
  <p>
    <%= f.label :email, 'Email address' %><br />
    <%= f.text_field :email %>
  </p>
  <p>
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </p>
  <p>
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %>
  </p>
  <p>
    <%= f.check_box :eula %>
    <%= f.label :eula, 'I agree to the terms and conditions' %>
  </p>
  <p><%= f.submit "Create my account" %></p>
<% end %>

Какой из следующих способов является лучшим способом сделать это?

  • имеет 2 отдельные части формы, одну для создания и одну для обновления
  • имеют 1 частичную форму, но имеют условные метки, основанные на действии (возможно ли это?)
  • делит общую часть на частичную и повторно использует ее в формах создания и обновления

Если бы я делал условную форму, как бы я проверял, какое действие выполняется?

Ответы [ 2 ]

12 голосов
/ 22 сентября 2009

ActiveRecord имеет метод new_record?, который вы можете использовать, чтобы решить, что показывать в форме:

<% form_for @user do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name, 'Full name' %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :username %><br />
    <%= f.text_field :username %>
  </p>
  <p>
    <%= f.label :email, 'Email address' %><br />
    <%= f.text_field :email %>
  </p>
  <p>
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </p>
  <p>
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %>
  </p>
  <% if @user.new_record? %>
    <p>
      <%= f.check_box :eula %>
      <%= f.label :eula, 'I agree to the terms and conditions' %>
    </p>
  <% end %>
  <p><%= f.submit @user.new_record? ? "Create my account" : "Update my account" %></p>
<% end %>
3 голосов
/ 22 сентября 2009

Оберните тег вокруг тега частичного вызова и поместите кнопку отправки в соответствующие представления. Только установите флажок eula в представлении создания.

Вы можете создать переменную в новых и обновленных представлениях и использовать ее в качестве имени метки.

<%= f.label email, emaillabel %>

[Изменить] Если вам нужно передать переменные для частичного использования, это:

<%= render :partial => 'form', :locals => { :myvar => myvar } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...