在保存模型gsub之前无法正常工作

时间:2015-04-18 13:07:31

标签: ruby-on-rails

我正在尝试这样做,以便在提交表单时,我会在模型级别上进行一些gsub验证,然后再将其保存到数据库中。

这是我的型号代码:

class Blast < ActiveRecord::Base
    before_save :inliner

    def inliner
        self.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;"')
    end

end

这是我的控制器代码:

  def emailblastcreate
    email = Blast.create(blast_params)
    user = current_user
    PanelMailer.blast(user, email).deliver
  end

似乎无法绕过它,任何见解都会很棒。

1 个答案:

答案 0 :(得分:0)

<强>更新

我认为您没有正确使用gsub。这是重写方法的一种方法。

before_save :inliner

def inliner

  regex_hash = {
    Regexp.new(%Q(class="wysiwyg-color-grey"))   => 'style="color: #A9A9A9;"',
    Regexp.new(%Q(class="wysiwyg-color-blue"))   => 'style="color: #333399;"',
    Regexp.new(%Q(class="wysiwyg-color-purple")) => 'style="color: #663399;"',
    Regexp.new(%Q(class="wysiwyg-color-red"))    => 'style="color: #CC3333;"',
    Regexp.new(%Q(class="wysiwyg-color-orange")) => 'style="color: #FF6633;"',
    Regexp.new(%Q(class="wysiwyg-color-yellow")) => 'style="color: #FFCC33;"',
    Regexp.new(%Q(class="wysiwyg-color-green"))  => 'style="color: #009933;"'
  }

  regex_hash.each do |regex_exp, val|
    self.body.gsub!(regex_exp, val)
  end

end

您还可以参考以下内容进一步改进语法:

Ruby gsub multiple characters in string

Ruby multiple string replacement