我想知道如何处理这个问题:
当我通过模型方法保存时,我想生成一个link_to到正文消息。
在这个方法中,我想创建一个新的Message,并希望在其中放置一个链接,这样当我的网站用户在浏览每条消息时都可以点击它。
你会如何以一种好的方式做到这一点?我试过了,但没有用
Request.rb
# Create a new Message after an acceptance
def notify_acceptance
msg = Message.new(subjects: [self.subject], author: self.evaluated_by)
msg.body = "a warm welcome to #{ActionView::Helpers.url_to_user_profile(self.requested_by)} who just joined us!"
msg.distribute([self.subject], self.evaluated_by)
return msg.save!
end
这是我的帮助文件:
module RequestsHelper
def url_to_user_profile(user)
link_to user.name, profiles_path(user.id)
end
end
Thx!
答案 0 :(得分:2)
简单的答案是,你做不到。 link_to
是从ActionPack
创建的,其中模型继承自ActiveRecord
。
解决此问题的一个简单方法是将link_to
逻辑放在helpers
。
例如:
应用程序/视图/ index.html.erb
link_to_home
应用程序/助手/ application_helper.rb
def link_to_home
if root_url?
"Home"
elsif params[:controller] = "posts" && params[:action] == 'index'
"Home"
else
link_to "Home", root_url
end
end
这样一来,如果你在索引页面上有分页,这是你的根URL,它就不会链接到Home。但是如果您使用link_to_unless_current
它将链接到home,即使它是执行link_to_unless_current
的控制器和操作。如果这个例子没有意义,那真的不重要。这是在帮助者中保持link_to
逻辑的轨道方式。
如果确实有必要,您可以在模型中创建一个具有常规HTML的字符串,然后在视图中对其进行转义。
class Post < ActiveRecord::Base
def link
"<a href="#{url}">#{title}</a>"
end
end
然后在您的视图中,您可以拥有&lt;%= @ post.link%&gt;并且它将链接到url
,并且它将被称为title
,假设它们是您@post
对象上的属性并且您已保存了某些内容
答案 1 :(得分:1)
你试过这种方式吗?
link_to user.name, :controller => "profiles", :action => "show", :id => user.id
这样:
link_to "String you want", :controller => "controllers name", :action => "action", :(param name) => value
在这里你可以输入你需要多少个参数
修改强>
使用profiles_url(user.id)
您可以获得此页面的网址,您可以手动创建链接,如下所示:
msg.body = "a warm welcome to <a href='#{profiles_url(self.requested_by.id)}'>#{profiles_url(self.requested_by.name)}</a> who just joined us!"
答案 2 :(得分:0)
我认为问题是您的模型(可能是用户)无法识别profiles_path(user.id), 所以在用户模型中添加以下内容
include ActionDispatch::Routing::UrlFor
include Rails.application.routes.url_helpers
我没有建议在你的模型中包含更多的视图助手,你不能使用link_to,但路径助手方法有效,然后在你的msg中创建类似“link_name”的url 它适用于Rails3。