Ben*_*ley 6 ruby-on-rails actionmailer
我有一个 ActionMailer 的视图,其中包含一些不同的链接。我现在正在 localhost:3000 上运行它,因此我已在setup_mail.rbapp/initializers 中调用的文件中进行了设置(如此处所示):
ActionMailer::Base.default_url_options[:host] = "localhost:3000"
Run Code Online (Sandbox Code Playgroud)
当我去url_for视图中使用时,它似乎没有拉出这个值。如果我然后添加:host => "localhost:3000"到每个url_for标签,它们就会正常工作。但如果不包含这些,它们就无法工作。
我有另一个标签 ,project_url正如它所显示的那样:指向指定项目的链接。该函数(包括主机值)只需project_url(@project). 为什么其中一个有效,而另一个却不起作用?
从我读到的所有内容来看,在初始化程序中设置default_url_options[:host]应该允许我省略标签:host中的值url_for。显然,仅仅添加该值并不是世界上最糟糕的事情,但这似乎没有必要,这意味着当我最终在某个地方托管该项目时,我将不得不仔细检查并更改整个地方的值。但更糟糕的是,这是我不明白的事情。当我来到这里时,我仍在学习,所以我想知道我做错了什么。
文档对此非常清楚
\n\n\n\n\n当您决定为邮件程序设置默认 :host 时,您需要确保在使用 url_for 时使用 :only_path => false 选项。由于当显式提供 :host 选项\xe2\x80\x99t 时 url_for 视图助手将默认生成相对 URL,因此传递 :only_path => false 将确保生成绝对 URL。
\n
您可以创建自己的助手来使用,而不是url_for强制:only_path使用false
def your_url_for(options = {})\n options.reverse_merge! only_path: false\n url_for(options)\nend\nRun Code Online (Sandbox Code Playgroud)\n\n您也可以猴子补丁导轨强制将此设置为默认值,但这取决于您:)
\n\n这一切都是除了添加
\n\nconfig.action_mailer.default_url_options = { host: "YOUR HOST" }\nRun Code Online (Sandbox Code Playgroud)\n\n至config/application.rb或同等水平。
| 归档时间: |
|
| 查看次数: |
5522 次 |
| 最近记录: |