在表单中,我有一些submit_tags,在服务器端,我必须检测哪一个被点击。 这是我尝试过,而不是工作:在服务器端我只在params中获得一个动作名称:
<%= form_tag controller_action_path(:id => @project.id), :method => :post do %>
<% if @project_is_synced %>
<%= submit_tag 'Update synchronization', :name => 'update' %>
<%= submit_tag 'Stop synchronization', :name => 'stop' %>
<% else %>
<%= submit_tag 'Start synchronization', :name => 'start' %>
<% end %>
<% end %>
我只有params[:action]
,其当前操作名称始终相同
答案 0 :(得分:1)
最简单的调试方法是在本地运行它并查看参数,或者记录操作中的参数:
if request.post?
logger.warn "POST #{params}"
end
你已经命名了submit_tags,所以不是默认名称'commit',每个按钮都有不同的名称,你必须检查名为'start','stop'或'update'的params。
最简单的方法是删除名称并检查params [:commit]以获取变化值,但是如果您不想更改视图,请使用它(显然替换渲染代码):
if params[:start]
render :text => "start"
elsif params[:update]
render :text => "update"
else
render :text => "stop"
end
链接帖子中对答案的评论确实涉及到这一点,但我明白为什么你错过了它。