如何进行自定义POST请求

时间:2016-02-21 14:11:07

标签: ruby-on-rails post

我有一个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请求的操作?

2 个答案:

答案 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