我知道在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
答案 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
次请求。这应该适合你,但它不是传统的,所以你最好描述你希望它如何运作
<强>更新强>
我很高兴这对你有用
可能有助于其功能的几件事情:
link_to
使用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