0

使用 restful_authentication 生成的代码,我们通常会在注册和激活邮件中获取 'localhost' 作为 URL。我正在尝试创建这样的东西:

def signup_notification(user, host)
  setup_email(user)
  @subject    += 'Please activate your new account'

  @body[:url]  = "http://#{host}/activate/#{user.activation_code}"
end

但是,由于传递邮件的实际调用是在观察者中,我不能这样做:

UserMailer.deliver_signup_notification(user, request.host_with_port)

由于请求方法在模型中不可用。这样做的最佳方法是什么?

我考虑过将每个域的 URL 存储在 YAML 文件中,然后在启动时加载它,但是端口可能会改变,所以它不起作用。

或者,我考虑在某个地方创建一个静态类变量,该变量在加载应用程序时设置,但我不知道如何去做。请求方法是否可用于初始化程序?

4

4 回答 4

1

使用 ActiveMailer,我在config/envrionments/production.rb

config.action_mailer.default_url_options = { :host => "my.host.com" }

在模型中app/models/event_mailer.rb

def new_event(event)
    recipients  EventMailer::NO_REPLY
    bcc         event.emails('new_event')
    from        EventMailer::FROM_EMAIL
    subject     "#{EventMailer::SUBJECT_HEADER} Event Updated :: #{event.title}"
    content_type    "text/plain"
    body        :event => event
end

然后在邮件视图中app/views/event_mailer/new_event.rb

You can view the event by going to: <%= url_for(:controller => "events", :action => "show", :id => @event.id, :only_path => false) %>

在邮件中生成:

You can view the event by going to: http://my.host.com/events/11
于 2009-03-19T16:17:18.217 回答
1

我也遇到了同样的问题,这就是我所做的

  1. 在用户模型中,我将 :host 添加到 attr_accessible,然后添加此方法

    def 主机=(值)
      write_attribute :主机,值
    结尾
    
  2. 在用户控制器中,在发送电子邮件的方法中,例如创建和激活我放

    @user.host = request.host_with_port

因为我仍然是一个新手,所以我真的希望有人能为这个问题提出一个最佳实践解决方案。

于 2009-03-20T08:09:51.533 回答
1

试试 current_request 插件,描述在http://codeshooter.wordpress.com/2009/08/

为我工作

于 2009-10-02T15:57:06.107 回答
0

访问您的服务器的主机名位于请求的 Host 标头中。您不应该在模型中访问它(假设 rails 是健全的)。但是,如果您可以访问控制器中的请求对象,则可以在从 db 中提取模型对象时将该值插入模型字段。

于 2009-03-19T15:48:01.533 回答