在视图中调用命名路由助手以NameError结尾

时间:2016-03-17 08:57:42

标签: ruby-on-rails spree

在视图中调用命名路由助手以NameError结束以进行以下配置:

routes.rb

scope :orders, as: :orders do
  scope '/:order_id', as: :order do
    post :returns, :to => 'order_returns#create'
  end
end

$rake routes

orders_order_returns POST /orders/:order_id/returns(.:format) order_returns#create

当我向模板添加<%= orders_order_returns_path %>时,Rails退出undefined local variable or method 'orders_order_returns_path' for #<#<Class:0x007faec10fe728>:0x007faec10dc8d0> ...

在异常页面的控制台中执行Rails.application.routes.named_routes.helpers.map(&:to_s)返回:

["spree_path", "orders_order_returns_path", "rails_info_properties_path", "rails_info_routes_path", "rails_info_path", "rails_mailers_path", "spree_url", "orders_order_returns_url", "rails_info_properties_url", "rails_info_routes_url", "rails_info_url", "rails_mailers_url"]

我的问题是:为什么在视图中使用命名路径path / url helpers以异常结束,即使它们在控制台中可见?

1 个答案:

答案 0 :(得分:1)

我找到了答案here

  

因为您在狂欢模板中调用此内容,因此需要在main_app.前面添加main_app.products_starting_with_path,如main_app

这是Spree的发行说明:

  

相反,引用来自主要应用程序的路径   来自Spree的控制器,视图或模板,您必须使用main_app   路由代理

使用[Fact] public void Test_LogMessages() { InitAppSink(); var logger = new LoggerConfiguration().ReadFrom.AppSettings() .WriteTo.Sink(testSink) .MinimumLevel.ControlledBy(_levelSwitch) .CreateLogger(); logger.Information("Information Test Log Entry"); logger.Debug("Debug Test Log Entry"); ((IDisposable)logger).Dispose(); } 路由代理解决了所描述的问题:)