在我的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) %>
有正常的方法吗?
答案 0 :(得分:2)
我无法确切地告诉您要链接的内容或'obj'所指的内容,但您可以执行以下操作:
link_to obj.title, {:host => 'example.com'}
或
link_to obj.title, {:controller => 'store', :action => 'view_cart', :host => 'example.com'}
答案 1 :(得分:0)
好的,花了一些时间,我想我开始明白了。
您必须使用restful路由,然后您可以在Mailer操作中设置default_url_options[:host] = host
,并在default_url_options
中为其他控制器设置only_path为true。加:locale
。
在视图中我有:objects_url(object)
由于我有不同的主机名,因此我在发送邮件时将request.host_with_port
作为参数从控制器传递给邮件程序。
link_to
不接受参数,url_for()
只能从其中部分构建网址。
答案 2 :(得分:0)
def url_options
{ domain: 'example.com' }
end
或者更好地合并,以防您使用其他选项:
def url_options
{ domain: 'example.com' }.merge(super)
end