如何在使用引擎时在模型中找到资源路径?

时间:2015-08-20 19:58:34

标签: ruby-on-rails ruby ruby-on-rails-4 spree rails-routing

在使用Spree(一个Rails电子商务引擎)时,我试图在我的Spree :: Product模型中保存products_path以进行跟踪。

Looking on SO I found this solution, which looked like the perfect answer.

Rails.application.routes.url_helpers.products_path
Rails.application.routes.url_helpers.products_url(:host => "example.com")

但是使用该解决方案只是给了我以下错误。

NoMethodError: undefined method `products_path' for #<Module:0x007fe9e208e908>

非常沮丧......

1 个答案:

答案 0 :(得分:2)

使用Rails引擎时,您需要使用Engine的路由助手而不是主Rails应用程序路由助手。

Spree::Core::Engine.routes.url_helpers.products_path
Spree::Core::Engine.routes.url_helpers.products_url(:host => "example.com")

奖金提示:

如果要删除:host => "example.com"参数,可以在环境配置文件中添加主机指示符。

就像url_helpers一样,对于引擎,您需要在引擎路由下添加默认值。

# in config -> environments -> development.rb

Spree::Core::Engine.routes.default_url_options[:host] = 'localhost:3000'

注意:为Rails.application.routes.url_helpers设置默认主机; - )