我有一些像rake routes
这样的命名路线:
birthdays GET /birthdays(.:format) birthdays#index
在rakefile中,我只想在我的视图中调用birthdays_url
。
task :import_birthdays => :environment do
url = birthdays_url
end
但我收到错误undefined local variable or method 'birthdays_url' for main:Object
答案 0 :(得分:19)
您可以在rake任务中使用此示例代码:
include Rails.application.routes.url_helpers
puts birthdays_url(:host => 'example.com')
或者您可以在rake任务中使用此示例代码:
puts Rails.application.routes.url_helpers.birthdays_url(:host => 'example.com')
如果您只想要网址的路径部分,则可以使用(:only_path => true)
代替(:host => 'example.com')
。因此,这只会/birthdays
代替http://example.com/birthdays
。
您需要(:host => 'example.com')
或(:only_path => true)
件,因为rake任务不知道该信息并且在没有它的情况下会发出此错误:
Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
答案 1 :(得分:4)
for Rails 4包含将您的域放在rake任务顶部的代码
include Rails.application.routes.url_helpers
default_url_options[:host] = 'example.com'
答案 2 :(得分:3)
使用它:
Rails.application.routes.url_helpers.birthdays_url
或者不那么冗长:
include Rails.application.routes.url_helpers
url = birthdays_url