11

我有一些这样的命名路线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

4

3 回答 3

22

您可以在 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')

如果您只想要 URL 的路径部分,您可以使用(:only_path => true)代替(:host => 'example.com'). 所以,那只会给你/birthdays而不是http://example.com/birthdays.

您需要(:host => 'example.com')or(: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
于 2013-07-23T00:55:28.687 回答
4

对于 Rails 4,在您的 rake 任务顶部包含您的域的代码

include Rails.application.routes.url_helpers
default_url_options[:host] = 'example.com'
于 2015-07-10T17:49:17.830 回答
3

用这个:

Rails.application.routes.url_helpers.birthdays_url

或者不那么冗长:

include Rails.application.routes.url_helpers
url = birthdays_url
于 2013-07-23T00:48:45.990 回答