我有一个WelcomeController,目前只有动作GET #index不执行任何操作(视图呈现欢迎消息),也是根路径。 在这个视图中,我想有两个按钮来执行action1和action2。我通过执行以下操作设法通过action1按钮获得了我想要的结果:
class WelcomeController < ApplicationController
def index
end
def action1
... #code
end
end
视图/欢迎/ index.html.slim
h1 = "Welcome"
br
= form_tag url: welcome_index_path do
- if user_signed_in?
= submit_tag "Action1"
在routes.rb中:
get 'welcome/index'
post '/welcome/index', to: 'welcome#action1'
我想以类似的方式添加第二个按钮,但是当我点击它时,它会执行Action1(我假设它是因为在routes.rb中重新路由了welcome / index的post请求。
如何正确执行此操作,以便我可以根据需要执行多少次发送POST请求的操作?
答案 0 :(得分:1)
您可以通过此document了解有关路径路由的更多信息。
在这种情况下,您可以像这样定义routes.rb
:
resources :welcome, controller: 'welcome', as: 'welcome', only: [:index] do
collection do
post 'action_1'
post 'action_2'
end
end
然后您将查看:
= form_tag url: welcome_action_1_path do
= submit_tag "Action1"
= form_tag url: welcome_action_2_path do
= submit_tag "Action2"
答案 1 :(得分:0)
这更多是关于路由。检查路由上的Rails指南,这将对您有所帮助。 http://guides.rubyonrails.org/routing.html
对于action1,您可能想要设置不同的路线。
get 'welcome/index'
post 'welcome/action1', to: 'welcome#action1'
这意味着对网址'welcome/action1'
的HTTP POST操作将映射到action1
控制器中的welcome
方法。
您可以继续添加这些内容。
post 'welcome/action2', to: 'welcome#action2'
您还可以使用其他HTTP方法。可以将针对相同URL的不同HTTP方法路由到不同的方法。
get 'welcome/action3', to: 'welcome#action3_get'
post 'welcome/action3', to: 'welcome#action3_post'
patch 'welcome/action4', to: 'welcome#action4'
delete 'welcome/action5', to: 'welcome#action5'
此外,您还可以为该路由设置别名,类似于welcome_index_path
,这毕竟是由rails helper生成的路径,默认情况下映射到get 'welcome/index'
。
post 'welcome/action6', to: 'welcome#action6', as: 'welcome_action6'
然后您也可以在表单标记中使用welcome_action6_path
。