如何创建link_to到模型

时间:2011-07-11 11:14:55

标签: ruby-on-rails ruby-on-rails-3

我想知道如何处理这个问题:

当我通过模型方法保存时,我想生成一个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!

3 个答案:

答案 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。