【问题标题】:No route matches error in RailsRails 中没有路线匹配错误
【发布时间】:2016-07-01 09:54:16
【问题描述】:

我收到以下错误

没有路线匹配 {:action=>"index", :controller=>"module/admin/orders"}

当使用以下内容时:

<%= form_tag({ :action => :index}, { :method => "get" }) do %>

我的路线有这个路径:

admin_orders GET /new/admin/orders(.:format) module/admin/orders#index

我尝试在rails console 中运行此代码,它可以正常运行:

r.url_for :controller => 'module/admin/orders', :action=> :index, :id=>42
 => "http://domain.com/new/admin/orders?id=42"

r.url_for :controller => 'module/admin/orders', :action=> :index
 => "http://domain.com/new/admin/orders"

我的应用程序正在使用Spree,并且这个控制器继承了Spree::Admin::ResourceController

【问题讨论】:

  • url_for 将返回格式化的 URL,而与方法无关。您提供的form_tag 明确使用get,因此这就是要搜索的路线。您是否验证过您的路线具有get(不是post)语义?您也可以附上rake routes 的相关部分。
  • 我确定这条路径具有“获取”语义。部分 rake 路由附在上面,代码在控制台中工作
  • 我认为这是因为 Rails 试图以某种方式在 spree 引擎中找到这条路线
  • 试试&lt;%= form_tag admin_orders_path, method: 'get' do %&gt;
  • 试试&lt;%= form_tag({ :controller =&gt; "orders", :action =&gt; :index}, { :method =&gt; "get" }) do %&gt;

标签: ruby-on-rails


【解决方案1】:

用户正确的 url 助手如下

<%= form_tag(admin_orders_path, method: :get) %>

【讨论】:

    【解决方案2】:

    答案是将路由配置放在正在使用的同一引擎控制器中(例如本例中的 Spree):

    Spree::Core::Engine.add_routes do scope 'module/' do namespace :admin, as: 'module_admin' do resources :orders, controller: '/module/admin/orders', only: [:edit, :index, :update] end end

    并使用:

    &lt;%= form_tag(module_admin_orders_path, method: :get) %&gt;

    或使用带有引擎前缀的 url 助手:

    &lt;%= form_tag(main_app.admin_orders_path, method: :get) %&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多