RoR:按钮单击动作调用

时间:2014-05-06 02:48:48

标签: ruby-on-rails ruby-on-rails-3

我知道在100页的页面中已经提到了这一点,我尝试了很多工作。我不知道我错过了哪里:

controller(登录)

class LoginsController < ApplicationController
  def index

  end

  def create

  end
  def buttons

  end
end

的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"} %>

buttons.html.erb页面在views目录中创建。

当我点击&#34;提交&#34;按钮,我明白了:

No route matches [POST] "/logins/index"

我尝试更改routes.rb,index.htm.erb中的各种表单用于按钮但无法使其正常工作。我忽略了什么吗?

任何帮助表示感谢。

由于

ABHI

4 个答案:

答案 0 :(得分:3)

button_to的方法默认发布。

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to

  

:method - HTTP动词的符号。支持的动词有:post,:get,   :delete,:patch和:put。默认情况下,它将是:post。

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

<%= button_to   'Submit', { :action => "buttons", :controller => "logins"},  method: :get %>

答案 1 :(得分:1)

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

#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 %>

我使用了link_to,因为此回答建议button_to POST次请求。这应该适合你,但它不是传统的,所以你最好描述你希望它如何运作


<强>更新

我很高兴这对你有用

可能有助于其功能的几件事情:

  1. 传统路线
  2. 使用link_to
  3. 使用routing in Rails时,它基本上是中间件,用于定义应用程序如何“捕获”传入的请求。当您浏览domain.com/route时,Rails将/route&amp;网址的HTTP verb部分&amp;加载相应的controller / action以帮助加载。

    在定义路线时,您需要非常小心定义哪个routes以及如何定义它们。最好的方法是使用Rails约定(这实际上意味着使用内置帮助程序),例如resources :controller

    -

    我们还使用link_to代替button_to

    button_to在您的网页上创建一个小表单,然后向您指定的路由发送请求。此表单通常为POST,但可以指定GET。根据您的新评论,您可能希望阅读button_to documentation以正确格式化

答案 2 :(得分:0)

您只能在routes.rb中定义方法。这就是为什么错误说没有路由匹配&#34; POST&#34;方法。添加post方法。

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

答案 3 :(得分:0)

我知道这是很老的帖子......

这可以在rails 4中完成:

<%= button_to   'Submit', prefix_path,  method: :get %> 
当您按下rake路线并添加&#39; _path&#39;时,可以看到

前缀_路径在最后并替换为prefix_path