Ruby on rails RoR:按钮单击操作调用

Ruby on rails RoR:按钮单击操作调用,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我知道这已经被要求在100页,我尝试了很多让它工作。我不知道我错过了什么: 控制器(登录) class LoginsController“登录”},方法::get%> 默认情况下,按钮的方法是post :方法-HTTP谓词的符号。支持的动词有:post、:get、, :删除、:修补和:放置。默认情况下,它将是:post 更改index.html.erb中的代码: <%= button_to 'Submit', { :action => "buttons", :controlle

我知道这已经被要求在100页,我尝试了很多让它工作。我不知道我错过了什么:

控制器(登录)

class LoginsController
routes.rb

LoginApp::Application.routes.draw do

match "logins/index" => "logins#index", :as => :index , :via => :get

match "logins/create" => "logins#create", :as => :create ,:via => :get

match "buttons" => "logins#buttons", :via => :get
#get "logins/buttons" => "logins#buttons"
index.html.erb

<%= button_to   'Submit', { :action => "buttons", :controller => "logins"} %>
我尝试更改routes.rb,index.htm.erb中的各种按钮形式,但无法使其正常工作。我忽略了什么吗

谢谢你的帮助

谢谢


Abhi

您只有在routes.rb中定义的get方法。这就是为什么错误显示“POST”方法没有路由匹配。同时添加post方法

match "logins/index" => "logins#index", :as => :index , :via => [:get, :post]

您只有在routes.rb中定义的get方法。这就是为什么错误显示“POST”方法没有路由匹配。同时添加post方法

match "logins/index" => "logins#index", :as => :index , :via => [:get, :post]

默认情况下,按钮_to的方法为post

:方法-HTTP谓词的符号。支持的动词有:post、:get、, :删除、:修补和:放置。默认情况下,它将是:post

更改index.html.erb中的代码:

<%= button_to   'Submit', { :action => "buttons", :controller => "logins"},  method: :get %>
“按钮”,:controller=>“登录”},方法::get%>

默认情况下,按钮的方法是post

:方法-HTTP谓词的符号。支持的动词有:post、:get、, :删除、:修补和:放置。默认情况下,它将是:post

更改index.html.erb中的代码:

<%= button_to   'Submit', { :action => "buttons", :controller => "logins"},  method: :get %>
“按钮”,:controller=>“登录”},方法::get%>

鉴于其他答案不起作用,以下是我的建议:

#config/routes.rb
resources :logins, only: [:index, :create] do
    collection do
        get :buttons
    end
end

#view
<%= link_to "Submit", logins_buttons_path # -> whatever the path helper is %>
#config/routes.rb
资源:登录,仅:[:索引,:创建]do
收藏办
获取:按钮
结束
结束
#看法
无论路径帮助器是什么%>
我之所以使用,是因为这个答案建议
按钮_
用于
POST
请求。这应该适合你,但它是非常规的,所以你最好描述一下你希望它如何工作


更新

我很高兴这对你有用

以下几点可能有助于实现其功能:

  • 常规路线
  • 使用链接到
  • 使用时,基本上是中间件,它定义了应用程序如何“捕获”传入请求。当您浏览到
    domain.com/route
    时,Rails获取URL的
    /route
    部分和
    HTTP动词
    并加载相应的
    控制器/操作
    ,以帮助加载

    因此,在定义路由时,您需要非常小心定义哪些
    路由
    ,以及如何定义它们。最好的方法是使用Rails约定(本质上是指使用内置帮助程序),例如

    --

    我们还使用了链接到的
    来代替


    按钮\u to
    在您的页面上创建一个小表单,然后该表单向您指定的路线发送请求。此表单通常是
    POST
    ,但可以指定
    GET
    。鉴于您的新评论,您可能需要仔细阅读,以使其正确格式化

    鉴于其他答案不起作用,以下是我的建议:

    #config/routes.rb
    resources :logins, only: [:index, :create] do
        collection do
            get :buttons
        end
    end
    
    #view
    <%= link_to "Submit", logins_buttons_path # -> whatever the path helper is %>
    
    #config/routes.rb
    资源:登录,仅:[:索引,:创建]do
    收藏办
    获取:按钮
    结束
    结束
    #看法
    无论路径帮助器是什么%>
    
    我之所以使用,是因为这个答案建议
    按钮_
    用于
    POST
    请求。这应该适合你,但它是非常规的,所以你最好描述一下你希望它如何工作


    更新

    我很高兴这对你有用

    以下几点可能有助于实现其功能:

  • 常规路线
  • 使用链接到
  • 使用时,基本上是中间件,它定义了应用程序如何“捕获”传入请求。当您浏览到
    domain.com/route
    时,Rails获取URL的
    /route
    部分和
    HTTP动词
    并加载相应的
    控制器/操作
    ,以帮助加载

    因此,在定义路由时,您需要非常小心定义哪些
    路由
    ,以及如何定义它们。最好的方法是使用Rails约定(本质上是指使用内置帮助程序),例如

    --

    我们还使用了链接到的
    来代替


    按钮\u to
    在您的页面上创建一个小表单,然后该表单向您指定的路线发送请求。此表单通常是
    POST
    ,但可以指定
    GET
    。根据你的新评论,你可能想仔细阅读一下,以使其格式正确

    我知道这是一篇非常古老的文章

    这可以在rails 4中完成,如下所示:

    <%= button_to   'Submit', prefix_path,  method: :get %> 
    
    
    

    按rake routes并在末尾添加“\u path”并替换前缀路径时,可以看到前缀路径

    我知道这是一篇非常古老的文章

    这可以在rails 4中完成,如下所示:

    <%= button_to   'Submit', prefix_path,  method: :get %> 
    
    
    

    当您按rake routes并在末尾添加“_path”并替换前缀_path时,可以看到前缀_path

    您不想通过get方法提交登录表单:)根据routes.rb他想要:匹配“按钮”=>“登录按钮”,:via=>:getyeah但在URL中发送用户名/密码显然是错误的。解决此问题的正确方法是在routes中添加post。您不想通过get方法提交登录表单:)根据routes.rb他想要:匹配“buttons”=>“logins#buttons”,:via=>:getyeah,但在URL中发送用户名/密码显然是错误的。解决此问题的正确方法是在路由中添加post。谢谢emailleni。现在它没有显示错误,但页面被重定向回索引页。它没有点击按钮操作。它将停留在索引页上。再次检查您的路由。在您看来,操作是按钮,但前面的错误是索引操作。再次检查您的代码。它似乎对我不起作用。。匹配“登录/按钮”=>“登录”