在表单文本区域使用gsub

时间:2015-04-17 19:53:48

标签: ruby-on-rails

我已经集成了一个所见即所得的编辑器,我需要做一些替换以保持内联兼容性。在将params保存到数据库之前,我已将params[:body].gsub()放在create方法的开头。但是,我得到了undefined method gsub'为零:NilClass`

最好的方法是做什么?

  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

1 个答案:

答案 0 :(得分:0)

好吧,首先,编辑params对我来说似乎很奇怪(同样你的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

希望能带你朝着正确的方向前进。