rails activerecord关注,包括url helpers

时间:2014-05-05 04:05:26

标签: ruby-on-rails activerecord

我正在尝试为某些模型创建一个before_save回调,这些模型会将链接和格式添加到文本中并保存在特殊字段中。它不会让我在回调中包含URL帮助程序。

这是我的代码:

module SocialText
  extend ActiveSupport::Concern

  included do
    before_save :action_before_save
  end

  def action_before_save
    self.body_formatted = htmlizeBody(self.body)
  end

  def htmlizeBody(body)
    include Rails.application.routes.url_helpers
    include ActionView::Helpers

    #replace all \ns with <br>
    body = body.gsub(/\n/, ' <br/> ')

    words = body.split(/\s/)
    words.map! do |word|
      if word.first == '@'
        username = extractUsernameFromAtSyntax word
        user = User.find_by! username: username

        if not user.nil?
          link_to(word, profile_path(user.username))
        else
          word
        end
      else
        word
      end
    end

    words.join " "
  end

  def extractUsernameFromAtSyntax(username)
    matchData = username.match(/@(\w+)(['.,]\w*)?/)

    if not matchData.nil?
      matchData[1]
    else
      username
    end
  end
end

我得到了:

NoMethodError (undefined method `include`)

我如何获得帮助?有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

include对类实例对象进行操作,并将其称为实例方法。

您应该在方法之外使用include部分。

考虑在您的模块范围内使用require

答案 1 :(得分:0)

htmlizeBody函数中: include Rails.application.routes.url_helpers include ActionView::Helpers

这是在错误的范围内,将其移至extend ActiveSupport::Concern下方将解决您的错误。

您可以问自己的另一个问题是您需要在关注级别使用视图助手?

修改默认URL主机选项时通常会使用

include Rails.application.routes.url_helpers(通常在需要与外部API接口时)。在这种情况下,在/lib目录中使用它是有意义的。

有关详细信息,请参阅this SO postthis post on using url helpers