在Rake任务中使用路由助手

时间:2010-05-24 00:00:01

标签: ruby-on-rails routing rake actionmailer

我有一个rake任务发送下一个'x'邀请加入测试版它使用此代码:

desc "This will send out the next batch of invites for the beta"
task :send_invites => :environment do
  limit = ENV['limit']
  c = 0
  invitation = Invitation.all(:conditions => { :sent_at => nil, :sender_id => nil }, :limit => limit).each do |i|
    Mailer.deliver_invitation(i, register_url(i.token))
    c.increment!
  end

  puts "Sent #{c} invitations."
end

我需要将'register_url'传递给Mailer,以便链接显示在电子邮件中,但由于这是从rake任务运行而不是来自请求,因此它无法访问帮助程序方法。实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

您使用ActionMailer传递消息吗?看起来好像。如果是这样,您可以直接传递令牌并让Mailer自己使用register_url格式化令牌。所以你会这样做:

invitation = Invitation.all(:conditions => { :sent_at => nil, :sender_id => nil }, :limit => limit).each do |i|
    Mailer.deliver_invitation(i)
    c.increment!
end

然后在您的邀请模板中,您只需使用

<%= register_url(i.token) %>