Направляющие: мультикнопки отправки в одной Форме

Скажите, что у меня есть модель Article, и в статье 'новое' представление я имею две кнопки, "Публикую", и "Сохраняют Проект".

Мой вопрос состоит в том, как я могу знать, какая кнопка нажата в контроллере.

У меня уже есть решение, но я думаю, что должен быть лучший путь. То, что я в настоящее время использовал в представлении:

<div class="actions">
  <%= f.submit "Publish" %>
  <%= f.submit "Save Draft", :name => "commit" %>
</div>

Таким образом в контроллере, я могу использовать параметрические усилители [: фиксация] представляет в виде строки для обработки того действия.

def create
  @article = Article.new(params[:article])
  if params[:commit] == "Publish"
    @article.status = 'publish'
    // detail omitted
  end

  @article.save
end

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

ОБНОВЛЕНИЕ: Так как эти кнопки находятся в той же форме, они все идут в 'создать' действие, и это хорошо для меня. То, что я хочу, должно обработать это в рамках действия по созданию, те, которые дают модели Article столбец 'состояния', и содержит 'общественность' или 'проект'.

59
задан kinopyo 26 July 2010 в 06:45
поделиться

2 ответа

Это было рассмотрено в Railscast эпизоде 38. Использование хэша params для определения того, какая кнопка была нажата, является правильным подходом:

View:

<%= submit_tag 'Create' %>
<%= submit_tag 'Create and Add Another', name: 'create_and_add' %>

Controller:

if params[:create_and_add]
  # Redirect to new form, for example.

else
  # Redirect to show the newly created record, for example.
end
64
ответ дан 24 November 2019 в 18:30
поделиться

Я помню, как однажды столкнулся с этой проблемой. Вы не можете оставить две кнопки, а затем вызвать какое-то действие на основе params [: commit]. кнопка отправки onclick будет вызывать URL-адрес, на который ссылается форма. Есть определенные плохие способы добиться желаемого поведения. Сохраните кнопку для вызова действия, на которое ссылается форма, и чтобы получить другую кнопку для вызова действия, я использовал link_to, а затем изменил стили, чтобы они соответствовали кнопке. Кроме того, в качестве альтернативы вы можете использовать jQuery для изменения URL-адреса, который будет вызывать форма, тем самым решая, какое действие вызывается во время выполнения. Надеюсь это поможет.

1
ответ дан 24 November 2019 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: