我有两种形式:
= form_for @form_one, :url => form_path do |f|
= f.hidden_field :promotion_id
= f.label :page_title, 'After Like: Page Title'
= f.submit 'Update', :class => 'smBlueButton'
= render :partial => 'form_two'
如何从表单2下面的表单1移动提交标记,表单2的提交标记在表单1之前显示?
这不起作用:
= form_for @form_one, :url => form_path do |f|
= f.hidden_field :promotion_id
= f.label :page_title, 'After Like: Page Title'
= render :partial => 'form_two'
= f.submit 'Update', :class => 'smBlueButton'
答案 0 :(得分:3)
提交2个提交标签很好,但您只能拥有一个表单。
提交标记将回发到form_for声明中定义的表单控制器操作。您需要在控制器操作中执行的操作是检查提交参数(params[:commit]
)以获取按钮文本的值,并根据该值在相应的条件下执行操作。
所以从部分2中移除form_for(也许可以在这里使用fields_for),将提交按钮移动到form1,无论你想要它,并检查commit params hash是否适当的值
e.g。
def update
if params[:commit] == 'Update form 1'
#do something
elsif params[:commit] == 'Update form 2'
#do something else
else
#Rails an error - You have not set the right values in your form submit buttons
end
end
最好使用i18n作为按钮文本和控制器逻辑来测试按钮文本,然后您可以随意将按钮文本更改为您想要的任何内容而不会弄乱您在控制器中的检查