由于同一表单中有多个submit_tag,因此我使用send(params[:commit])
将submit_tag值传递给所需的操作{action2,action3}。
这里的问题是,我想使用form_tag调用操作而不重定向到新的操作页面。到目前为止,我知道将remote: true
插入form_tag
可以解决这个问题,但是需要为调用action2或action3做更多的代码(AJAX)。
我想知道,有没有办法在没有重定向到action1.html.erb的情况下调用form_tag
,但可以使用send(params[:commit])
。
在page.html.erb
中<%= form_tag "action1" do %>
<%= text_area_tag :data %>
<%= submit_tag: action2, remote: true %>
<%= submit_tag: action3, remote: true %>
<% end %>
在controller.rb
中def action1
send(params[:commit].downcase)
end
def action2
puts params[:data]
...
end
def action3
puts params[:data]
...
end
答案 0 :(得分:0)
我只是使用case语句并处理action 2或3的返回值。也许是这样的:
def action1
case params[:commit].downcase
when action2
result = action2(params)
when action3
result = action3(params)
end
# do something with result now
render result
end
我还会将两个动作移动到控制器内的private
。
这样就可以完成你想做的事情并避免进行字符串评估。
我希望这会有所帮助
答案 1 :(得分:0)
可以这样做:
class PersonController < ApplicationController
def action1
send(parse_action)
# ...
end
def action2
process_action2
# ...
end
def action3
process_action3
# ...
end
protected
def parse_action
%w{action2 action3}.include?(params[:commit]) ? params[:commit] : 'action2'
end
def process_action2
# do stuff
end
def process_action3
# ...
end
end