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