Rails如何在保存之前总是gsub列?

Rai*_*ner 1 ruby ruby-on-rails ruby-on-rails-3

我想在保存或更新之前在我的列上创建gsub.

这是我的控制器:

        def dansk(text)
    self.text.gsub('å', 'å')
    self.text.gsub('Å', 'Å')
    self.text.gsub('æ', 'æ')
    self.text.gsub('Æ', 'Æ')
    self.text.gsub('ø', 'ø')
    self.text.gsub('Ø', 'Ø')
    end

def update  

        @photographer = Photographer.find(params[:id])          
        @photographer.update_attributes(params[:photographer])
        @photographer.text = dansk(params[:photographer][:text])
            @photographer.text = dansk(params[:photographer][:name])


                       !@photographer.save                              
            flash[:notice] = " "
            render_action 'edit'            


    end
Run Code Online (Sandbox Code Playgroud)

我做错了什么,为什么文字和名字不是"gsubbed"?

更新: 我的帮手:

def convert_html_entities(text)
    text.gsub(/å/,"å")
    text.gsub(/æ/,"æ")
    text.gsub(/ø/,"ø")   
    text.gsub(/©/,"©")
    text = text.gsub(/["]/, '"')       
end 
Run Code Online (Sandbox Code Playgroud)

apn*_*ing 5

你应该在模型级别执行此操作(如果你想保持DRY,可以将你的dansk方法放在一个模块中).

before_save :danskify

def danskify
  self.text = dansk(self.text) if text_changed?
  self.name = dansk(self.name) if name_changed?
end

def dansk(text)
  [['å', 'å'], ['Å', 'Å'], ['æ', 'æ'], ['Æ', 'Æ'], ['ø', 'ø'], ['Ø', 'Ø']].each do |rule|
    text = text.gsub(rule[0], rule[1])
  end
end
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,您只需要:

def update  
  @photographer = Photographer.find(params[:id])          
  @photographer.update_attributes(params[:photographer])
  flash[:notice] = " " #weird message BTW
  render :edit  
end
Run Code Online (Sandbox Code Playgroud)