在模型中保存包含erb数据的字符串

时间:2014-01-23 19:58:00

标签: ruby-on-rails

我目前在用户模型中保存了如下代码。

User.where(type: "supercool").each do |user|
    if user.score == 100
        user.message = "Hello #{user.name}, you now have #{user.points} points!".html_safe
    elsif user.address == "New York"
        user.message = "You live in the same town as #{Person.where(address:"New York").first.name}"
    user.save
end

我将这些消息保存在我的模型中,并通过在控制器中调用User.find(params [:id])。消息在视图中打印出来。

实际的型号代码要长得多,因为根据不同的场景有许多独特的消息。

虽然这有效,但我现在想要在消息中提到的对象中添加link_to

对于第一条消息,我想保存它,以便当我将它发送到视图时,它的形式为

Hello <%= link_to user.name, user_path(user.id) %>, you now have <%= link_to user.points, leaderboard_path %> points!

我尝试了以下内容,但它不起作用。

User.where(type: "supercool").each do |user|
    if user.score == 100
        user.message = "Hello #{link_to user.name, user}, you now have #{link_to user.points, leaderboard_path} points!".html_safe
    user.save
end

如何在字符串中保存erb?

2 个答案:

答案 0 :(得分:1)

这不是一个很好的做法。

你可以这样:

class Model < ActiveRecord::Base
  include Rails.application.routes.url_helpers

  def example
    ActionController::Base.helpers.link_to user.name, user
  end 
end

但是使用帮助器或erb模板向用户显示这似乎是最好的方法。

答案 1 :(得分:1)

这个怎么样?使用html标签而不是使用link_to

  User.where(type: "supercool").each do |user|
    if user.score == 100
      user.message = "Hello <a href=#{Rails.application.routes.url_helpers.user_path(user)}>#{user.name}</a>, you now have <a href=#{Rails.application.routes.url_helpers.leaderboard_path}>#{user.points}</a> points!".html_safe
      user.save
   end
 end

在你看来,只做

<%= user.message %>