如何使用respond_with在Rails 3中创建不同的提交操作

时间:2012-06-11 03:27:33

标签: ruby-on-rails ruby-on-rails-3

我希望能够使用respond_with:

对表单提交执行以下操作
  1. 提交然后重定向到索引
  2. 提交,然后留在
  3. 表格中
  4. 提交并显示创建的记录
  5. respond_with的默认操作是重定向到show动作。如何根据点击的按钮类型让控制器响应?

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

    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
    

2 个答案:

答案 0 :(得分:2)

在您看来,使用值submit_and_editsubmit_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

答案 1 :(得分: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],然后可以从那里重定向到后续页面。