как разбить f.submit из конструктора форм на частичный макет в rails 3?

Я создаю многоступенчатую форму и хочу повторно использовать код кнопки в нескольких представлениях. вот код, который я хотел бы разбить на частичный макет:

<div class="actions">
<%= link_to "Back", previous_wizard_path, :class => 'btn btn-large' %>
<%= f.submit "Next", class: "btn btn-large btn-primary" %>
</div>

Я скопировал этот код в новый частичный макет под названием «_action_buttons.html.erb».

Я пытаюсь отобразить этот фрагмент с помощью следующего кода:

<%= render 'multi_form/action_buttons' %>

Однако, когда я пытаюсь запустить это, я получаю следующую ошибку из-за f.submit:

undefined local variable or method `f' for #<#<Class:0x007fbae16c1dc8>:0x007fbae13b33e8>

Извлеченный источник (вокруг строки № 3):

1: <div class="actions">
2:     <%= link_to "Back", previous_wizard_path, :class => 'btn btn-large' %>
3:     <%= f.submit "Next", class: "btn btn-large btn-primary" %>
4:   </div>

как изменить вызов рендеринга, чтобы этой ошибки не возникало? Я понимаю, что это, вероятно, распространенная проблема; помогите нубу!


person diego    schedule 19.10.2012    source источник


Ответы (2)


  1. Вы не должны нарушать тег формы, так как это может привести к неожиданному поведению и нарушить читабельность вашего кода.
  2. Если вы действительно хотите следовать этому подходу, один из методов заключается в том, что вы можете передать переменную формы в свой шаблон, вы можете попробовать сделать следующее:

    <%= render :partial => 'multi_form/action_buttons', :locals => {:f => f} %>
    
person Sang Do    schedule 19.10.2012
comment
Спасибо за это. Я понимаю вашу точку зрения, но моя цель - сохранить код СУХИМ. У меня есть точно такой же код кнопки во многих представлениях для этой многоэтапной формы. Есть ли у вас какие-либо мысли о других способах достижения этого без нарушения тега формы? - person diego; 19.10.2012
comment
Неплохо иметь кнопку отправки, похожую на другие формы. Вот еще несколько вещей, которые вы можете улучшить: 1. вы можете сгруппировать стили отправки для всех кнопок отправки; 2. вы можете создать общую форму, а затем передать различные параметры для создания формы; 3. Я вижу, вы используете движок ERB, попробуйте Haml, я думаю, что он чище и его легче кодировать. - person Sang Do; 25.10.2012

Вы можете использовать более краткую форму без ключевого слова :partial.

Проверьте этот вопрос Rails: запутался в синтаксисе для передачи локальных переменных в частичные< /а>

person Prasanna Natarajan    schedule 19.10.2012