2013-07-23 12 views
8

Mam kilka nazwanych tras jak ten rake routes:Dostęp nazwanych Trasy w Rakefile

w A Rakefile ja po prostu chcą, aby móc nazwać birthdays_url jak bym moim zdaniem.

task :import_birthdays => :environment do 
    url = birthdays_url 
end 

Ale ja otrzymuję błąd undefined local variable or method 'birthdays_url' for main:Object

Odpowiedz

16

Można użyć tego kodu przykład w Twoje zadanie rake:

include Rails.application.routes.url_helpers 
puts birthdays_url(:host => 'example.com') 

czy można użyć tego kodu przykład w zadaniu natarcia:

puts Rails.application.routes.url_helpers.birthdays_url(:host => 'example.com') 

Jeśli chcesz tylko część ścieżki URL, można użyć (:only_path => true) zamiast (:host => 'example.com'). Tak więc dałoby to tylko /birthdays zamiast http://example.com/birthdays.

Trzeba albo kawałek (:host => 'example.com') lub (:only_path => true), ponieważ zadaniem natarcia nie wie, że trochę informacji i daje ten błąd bez niego:

Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true 
+0

nie lubię ciężko kodowania hosta. więc używam 'host: YOUR-APP-NAME :: Application.config.action_mailer.default_url_options [: host]' W ten sposób odbiera go z plików konfiguracyjnych. – user2726983

3

użyj:

Rails.application.routes.url_helpers.birthdays_url 

lub być mniej gadatliwy:

include Rails.application.routes.url_helpers 
url = birthdays_url 
4

dla Rails 4 zawierać kod ze swojej domeny u top swojego zadania natarcia

include Rails.application.routes.url_helpers 
default_url_options[:host] = 'example.com'