2011-10-14 72 views
0

我想在保存或更新之前在我的列上創建gsub。Rails如何在保存之前將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]) 


         [email protected]        
      flash[:notice] = " " 
      render_action 'edit'    


    end 

什麼是我做錯了,爲什麼文字和名稱不是「gsubbed」?

UPDATE: 我的助手:

def convert_html_entities(text) 
    text.gsub(/å/,"å") 
    text.gsub(/æ/,"æ") 
    text.gsub(/ø/,"ø") 
    text.gsub(/©/,"©") 
    text = text.gsub(/["]/, '"')  
end 

回答

4

您應該在模式水平做到這一點(也許把你丹麥語方法的模塊中,如果你想保留的東西DRY)。

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 

在你的控制器,你只需要:

def update 
    @photographer = Photographer.find(params[:id])   
    @photographer.update_attributes(params[:photographer]) 
    flash[:notice] = " " #weird message BTW 
    render :edit 
end 
+0

我可以在模型或控制器中使用應用程序助手嗎? –

+0

如果我是你,我會創建一個包含你的dansk方法的單獨模塊,然後將它包含在ApplicationHelper和適當的模型中。 – apneadiving

+0

當模型保存時,它將所有文本替換爲[[「å」,「å」],[「Å」,「Å」],[「æ」,「æ」],[「Æ」,「 Æ「],[」ø「,」ø「],[」Ø「,」Ø「]] –

0

忽略其他奇怪的問題與您的代碼,你想要的GSUB()方法(注意感嘆號!)。 gsub!()修改了字符串,而gsub()(沒有感嘆號)返回一個新的String對象。

2

沒有冒犯,但你的代碼沒有任何意義。在你的控制器中是'def dansk'。有很多問題。

如何得到它的工作

  1. 丹麥語它應該是 「text.gsub」 而不是 「self.text.gsub」。在這種情況下,self是對控制器本身的引用。
  2. 調用text.gsub一堆時間不會做你想做的事情。 gsub返回一個新的字符串替換冒犯的字符,保留原始字符串不變。所以你基本上失去了所有這些變化,因爲你只返回最後一個。它應該是這樣的

    def dansk(text) 
        text.gsub('å', 'å').gsub('Å', 'Å')... 
    end 
    

或本(GSUB!適用於它的改動原字符串)每次

def dansk(text) 
    text.gsub!('å', 'å') 
    text.gsub!('Å', 'Å') 
    ... 
    text 
end 

最好的辦法

這樣,你在攝影師對象上調用'保存',那些你不想要的字符將被自動替換。

model Photographer 
    ... 
    before_validation :dansk! 
    ... 

    private 

    def dansk! 
    self.text.gsub!('å', 'å') 
    self.text.gsub!('Å', 'Å') 
    ... 
    end 
end 

@photographer = Photographer.find(params[:id])   
@photographer.update_attributes(params[:photographer]) 
@photographer.save 
+0

什麼具體不起作用? – bioneuralnet

+0

我刪除了我以前的評論。這可以工作,但只是不需要(名稱也應該改變),而不是優化。 BTW不需要在update_attributes之後保存。 – apneadiving

+0

當我編寫示例時,模型不想保存letteæåø –

相關問題