0

在我的 application.html.erb 我有<%= render @objects %>,它呈现了一堆_object.html.erb部分,每个部分都有一个<%= link_to(object) %>. 当有人发表评论时,我在发送的电子邮件中呈现相同的单个部分<%= render @object %>,但我希望链接以服务器 url 开头。

我已经尝试了一切:

link_to(object)

url_for(object)

before_filter :set_mailer_host
def set_mailer_host
  ActionMailer::Base.default_url_options[:host] = request.host_with_port
end

default_url_options[:host] = "example.com"

def default_url_options
  { host: 'example.com' }
end

...没有任何作用。有还是没有:only_links

最后,我只是构建了一个愚蠢的助手,将主机名添加到链接:

# application_controller.rb
before_filter { App::request=request }

# application_helper.rb
def hostify obj
  "http://#{App::request.host_with_port}#{url_for obj}"
end

# _object.html.erb:
<%= link_to obj.title, hostify(object) %>

有没有正常的方法可以做到这一点?

4

3 回答 3

2

我无法真正说出您要链接的内容或“obj”指的是什么,但您可以执行以下操作:

link_to obj.title, {:host => 'example.com'}

或者

link_to obj.title, {:controller => 'store', :action => 'view_cart', :host => 'example.com'}
于 2013-01-15T03:55:18.717 回答
0

好吧,在花了一些时间之后,我想我开始弄清楚了。

您必须使用 restful 路由,然后您可以default_url_options[:host] = host在 Mailer 操作中设置,并将 :only_path 设置为 true 以default_url_options供其他控制器使用。加:locale

在我看来,我有:objects_url(object)

因为我有不同的主机名,所以我request.host_with_port在发送邮件时作为参数从控制器传递给邮件程序。

link_to不接受参数,url_for()只能从其中的一部分构建 url。

于 2013-01-17T05:34:09.923 回答
0
def url_options
  { domain: 'example.com' }
end

或者更好地合并以防您使用其他选项:

def url_options
  { domain: 'example.com' }.merge(super)
end
于 2017-08-22T19:10:10.447 回答