在Rakefile中访问命名路由

时间:2013-07-23 00:45:15

标签: ruby-on-rails rake rails-routing

我有一些像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

3 个答案:

答案 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