Ruby on rails 在Rails应用程序中,如何使用按钮运行非restful控制器方法?获取无路由错误

Ruby on rails 在Rails应用程序中,如何使用按钮运行非restful控制器方法?获取无路由错误,ruby-on-rails,routes,Ruby On Rails,Routes,在我的应用程序中,我有一个指向助手方法的链接: <%= link_to "Downgrade", :controller => :subscriptions, :action => :downgrade, class: "btn btn-primary", remote: true %> 这是我的routes.rb代码: Rails.application.routes.draw do resources :wikis devise_for :users res

在我的应用程序中,我有一个指向助手方法的链接:

<%= link_to "Downgrade", :controller => :subscriptions, :action => :downgrade, class: "btn btn-primary", remote: true %> 
这是我的routes.rb代码:

Rails.application.routes.draw do
 resources :wikis
 devise_for :users
 resources :users, only: [:update]
 root to: 'welcome#index'
 resources :charges, only: [:new, :create]
end
我知道Rails希望为此提供一个路由,但我不知道我会使用什么路由,因为该方法不是restful动词。也许还有另一种方法不使用
链接到
,它允许我从视图直接调用控制器方法?也许我也需要重新调整现状。感谢您的帮助

如果您需要更多代码来全面评估这种情况,请告诉我。

基本设置 首先,您需要在routes.rb中设置路线

get 'downgrade' => 'subscriptions#downgrade', :as => :downgrade_subscription
match '/downgrade_subscription', :to => 'subscriptioni#downgrade', :via => :get
这会将
/grade
重定向到订阅控制器和降级操作。
as
选项将此路由保存到一个变量中,您可以从所有视图调用该变量

<%= link_to "Downgrade", downgrade_subscriptions_path, class: "btn btn-primary", remote: true %>
这将创建路径
/subscriptions/grade
,而不是
/grade


在更详细地解释这一点方面,我们做得非常好。一定要看看

或者您可以在您的路线上尝试此功能。rb

get 'downgrade' => 'subscriptions#downgrade', :as => :downgrade_subscription
match '/downgrade_subscription', :to => 'subscriptioni#downgrade', :via => :get

自Rails 4以来,
match
已被弃用。使用特定方法而不是除此之外,我认为最好在降级方法中指定respond_to:js。将代码添加到路由会生成“缺少:路由定义上的控制器键,请检查路由”错误消息。指向的链接位于从设备注册编辑页面调用的部分视图中。所以我认为这让事情变得更复杂。你可以从我的帖子中看到Rails试图使用Desive/subscription的错误。对不起,我打错了。您可以再试一次吗?您可以从项目中的任何位置使用路由,这样就不会出现问题。我会投赞成票,因为它解决了我的问题,但我没有15点声誉。非常感谢你的帮助。乔·杜德,如果我的答案对你有帮助,请检查下面我的答案;)这肯定有帮助。此外,您还可以删除注释,因为它们是多余的噪音。
match '/downgrade_subscription', :to => 'subscriptioni#downgrade', :via => :get