= button_to не генерирует форму, если уже в другой форме - PullRequest
6 голосов
/ 19 сентября 2009

Использование одной и той же части формы для создания и редактирования в моем случае нового и предварительного просмотра. частично выглядит примерно так (я использую HAML)

=form_tag ({:action => params[:action]},  :multipart => true)
  =text_field :newsletter, :title
  =text_area :newsletter, :body
  =file_field :newsletter,:attachment
  -if params[:action] == "preview"
     =button_to "select contacts and send", :action => "contacts"
  =submit_tag "save and preview"

но в html-выводе это

...
<input type="submit" value="select contacts and send"/>
<input type="hidden" value="rwYnZlEpWV4dR89zjgprEALBYmP0xqM3lnKt9JDLyak=" name="authenticity_token"/>
<input type="submit" value="save and preview" name="commit"/>
...

почему button_to не генерирует форму button-to?

решение состоит в том, чтобы оставить кнопку вне частичного и только 1 на форму, а как мне иметь 2 кнопки в одной форме?

редактирование: другой обходной путь - скрытый флажок, который устанавливается javascript, если кнопка button_to нажата и отправляет форму, разделяя их в контроллере

Ответы [ 3 ]

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

HTML фактически не позволяет формам быть вложенными. Некоторые браузеры делают, но вы увидите какое-то сумасшедшее поведение в других. Является ли HTML-код, который вы показываете в необработанном виде, или вычисленный DOM из firebug?

Предпочтительный способ обработки этого случая - переместить button_to за пределы другой формы. Если вы круты с опциями JS-only, вы можете использовать link_to :method => :post и оформить ссылку так, чтобы она выглядела как кнопка.

1 голос
/ 17 октября 2013

Я строю камень под названием button_link_to.

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

Просто используйте его как link_to.

Вы можете получить больше информации здесь: https://github.com/tonilin/button_link_to

Если вы хотите посмотреть демо: http://button -link-to.herokuapp.com /

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

В конце концов использовали

:name => 'otheraction'

в контроллере, затем проверяется, если

params[:commit] or params[:otheraction]

был в хэше params

...