【问题标题】:Multiple gsub in a loop循环中的多个 gsub
【发布时间】:2013-01-21 12:25:59
【问题描述】:

我的 Article.rb 中有一个小百科全书:

class Article < ActiveRecord::Base
  attr_accessible :name, :content
end

如果我在一篇文章中找到与另一篇文章的名称相对应的文字,我现在想在文章中自动链接。例如。在名为“示例一”的文章中,内容是“您也可以查看示例二以进一步阅读”。在保存“示例一”时,我想设置文章“示例二”的链接。我的做法是添加到 Article.rb

class Article < ActiveRecord::Base
  attr_accessible :name, :content

  before_save :createlinks

  def createlinks
    @allarticles = Article.all
    @allarticles.each do |article|
      self.content = changelinks(self.content)
    end
  end

  def changelinks(content)
    content = content.gsub(/#{article.name}/, "<%= link_to '#{article.name}', article_path(article) %>")
  end

我的articles_controller 是:

def update
  @article = Article.find(params[:id])
  if @article.update_attributes(params[:article])
    redirect_to admin_path
  else
    render 'edit'
  end
end

但显然有一个错误引用行 content = content.gsub(etc...):

ArticlesController 中的名称错误#update #

的未定义局部变量或方法“article”

如何解决此问题,以便它检查所有其他文章名称并为我要保存的当前文章创建链接?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 loops callback gsub


    【解决方案1】:

    您的 changelink 方法不“知道”什么是 article 变量。您必须将其作为参数传递:

      def createlinks
        @allarticles = Article.all
        @allarticles.each do |article|
          self.content = changelinks(self.content, article)
        end
      end
    
      def changelinks(content, article)
        content = content.gsub(/#{article.name}/, "<%= link_to '#{article.name}', article_path(article) %>")
      end
    

    但我认为这种实现链接而不是文章名称的方式并不是最好的。

    【讨论】:

    • 谢谢。现在错误已经消失了。反正内容没变,好像gsub没改文章创建链接。我试图找出可能是什么原因......
    • 确实在我将 gsub 像这样合并到循环中之后它起作用了: self.content.gsub!(/#{article.name}/, "")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多