0

我希望能够使用 respond_with 对表单提交执行以下操作:

  1. 提交然后重定向到索引
  2. 提交然后留在表格中
  3. 提交并显示创建的记录

respond_with 的默认操作是重定向到 show 操作。如何使控制器根据单击的按钮类型做出响应?

这些“提交”将在创建和更新操作期间发生。例如,此代码中的创建操作将如何响应单击三个提交按钮中的任何一个(提交和编辑、提交和显示、提交和显示索引)

def new
    respond_with(@business=Business.new)
  end

  def create
    @business = Business.new(params[:business])
    flash[:notice] = t("flash.actions.create.notice", {:resource_name => "Business"}) if @business.save
    respond_with(@business)
  end
4

2 回答 2

2

在您看来,使用值和submit_and_edit,您可以在控制器中执行此操作:submit_and_showsubmit_and_show_index

def create
  @business = Business.new(params[:business])
  flash[:notice] = t("flash.actions.create.notice", {:resource_name => "Business"}) if      @business.save
  location = case params[:submit]
  when 'submit_and_edit'
    edit_business_url
  when 'submit_and_show'
    business_url
  when 'submit_and_show_index'
    redirect_to businesses_url
  end
  respond_with(@business, :location => location)
end
于 2012-06-11T04:00:20.663 回答
0

一般来说,最好只有一个提交按钮,以便用户对接下来发生的事情有预期(通常是转到显示页面)。

如果你想要 3 个提交按钮,那么你可以在提交前使用 Javascript 在数据上设置一个字段。在 HTML(假设为 ERB)中,为按钮添加一个隐藏字段和 id:

<%= hidden_field_tag :action, "", id='next_action' %>

<%= f.submit "Submit and Show, id='show' %>
<%= f.submit "Submit and Edit id='edit'%>
<%= f.submit "Submit and Index id='index'%>

现在您需要添加点击处理程序,因此在 .js.coffee 中:

$(":submit").click ->
    $('#next_action').val = $(this).attr('id')
    $(this).closest(':form').submit()

这应该找到 ID 为 next_action' 的隐藏字段,将其值设置为单击的按钮的 ID,然后提交表单。

现在在您的控制器中,您可以访问params[:next_action]并且可以从那里重定向到后续页面。

于 2012-06-11T03:54:15.467 回答