Ruby on rails 在表单文本区域上使用gsub

Ruby on rails 在表单文本区域上使用gsub,ruby-on-rails,Ruby On Rails,我集成了一个wysiwyg编辑器,为了保持内联兼容性,我需要做一些替换。在将参数保存到数据库之前,我已将params[:body].gsub()放置在create方法的开头。然而,我得到了nil:NilClass的未定义方法gsub'` 做这件事最好的方法是什么 def emailblastcreate params[:body].gsub('class="wysiwyg-color-grey"' => 'style="color: #A9A9A9;"',

我集成了一个wysiwyg编辑器,为了保持内联兼容性,我需要做一些替换。在将参数保存到数据库之前,我已将
params[:body].gsub()放置在create方法的开头。然而,我得到了nil:NilClass的
未定义方法
gsub'`

做这件事最好的方法是什么

  def emailblastcreate
    params[:body].gsub('class="wysiwyg-color-grey"' => 'style="color: #A9A9A9;"',
                                             'class="wysiwyg-color-blue"' => 'style="color: #333399;"',
                                             'class="wysiwyg-color-purple"' => 'style="color: #663399;"',
                                             'class="wysiwyg-color-red"' => 'style="color: #CC3333;"',
                                             'class="wysiwyg-color-orange"' => 'style="color: #FF6633;"',
                                             'class="wysiwyg-color-yellow"' => 'style="color: #FFCC33;"',
                                             'class="wysiwyg-color-green"' => 'style="color: #009933;"')
    email = Blast.create(blast_params)
    user = current_user
    PanelMailer.blast(user, email).deliver
  end

好的,首先,以这种方式编辑参数对我来说似乎很奇怪(而且你的
gsub
应该是
gsub!
-爆炸使它具有破坏性,前者需要一个新的变量才有用)。如果是我,在你的
Blast
模型中,我会把这项工作交给回调。[注:伪代码,未经测试,但有想法。]

class Blast

  before_save :gsub_colours if wysiwig_colours?

  private

  def gsub_colours
    hex_colours.each do |key, value|
      return unless body.include?(key)
      body.gsub!(key, value)
    end
  end

  def wysiwyg_colours?
    body.include?('wysiwyg-color-')
  end

  def hex_colours
    { 'class="wysiwyg-color-grey"' => 'style="color: #A9A9A9;"',
      'class="wysiwyg-color-blue"' => 'style="color: #333399;"',
      'class="wysiwyg-color-purple"' => 'style="color: #663399;"',
      'class="wysiwyg-color-red"' => 'style="color: #CC3333;"',
      'class="wysiwyg-color-orange"' => 'style="color: #FF6633;"',
      'class="wysiwyg-color-yellow"' => 'style="color: #FFCC33;"',
      'class="wysiwyg-color-green"' => 'style="color: #009933;"'
    }
  end
end

希望这会指引您正确的方向。

需要更多信息来帮助您,但是对于nil:NilClass
来说,
意味着您的
参数[:body]
是空的。
gsub
应该放在模型中,而不是控制器中,但一次只能放一件东西。@CD-RUM奇怪的是,它不是空的,如果我是诚实的,我就无法理解它。你的日志输出有
参数
?@CD-RUM“body”=>“test”}因此,无论您试图保存的对象是什么,都不会保存,并且您的应用程序会调用
gsub
。在你的问题中发布更多日志。它可能会说
ROLLBACK
或类似的话。