我希望能够使用respond_with:
对表单提交执行以下操作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
答案 0 :(得分:2)
在您看来,使用值submit_and_edit
,submit_and_show
和submit_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]
,然后可以从那里重定向到后续页面。