2011-10-10 22 views
0

尋找一種方式來之前修改記錄:一個新紀錄的領域之一如何在紅寶石節約on Rails的

  • 變化 - 在保存前(即迫使它爲小寫)到RoR分貝。 我試過了:

    before_create do | term | term.myfield.downcase! 結束

但這給出了一個錯誤:

undefined method `before_create' for RowsController:Class 

  • 檢查該字段是所有小寫,如果沒有,引發錯誤消息,並且不會產生記錄。

嘗試:

before_filter :check_lowcase, :only => [:new] 
def check_lowcase 
    if (Term.new =~ /[^a-z]+/) 
    flash[:notice] = "Sorry, must use lowercase" 
    redirect_to terms_path 
    end 
end 

這似乎只是被忽略....

回答

8

你需要做的是在你的模式,而不是你的控制器:

class YourModel < ActiveRecord::Base 
before_create :downcase_stuff 

    private 
    def downcase_stuff 
     self.myfield.downcase! 
    end 
end 
+0

謝謝!有用! 如果我想提出錯誤消息而不是糾正錯誤消息,該怎麼辦? – eran

+0

只需添加:errors.add(:myfield,「必須小寫」)。雖然這應該真的進入驗證而不是before_create過濾器 – Yule

+0

,我將如何把它放在驗證器中?有沒有一個接受自定義函數的驗證器? – eran

0
before_create :lower_case_fields 

    def lower_case_fields 
     self.myfield.downcase! 
    end 
0

before_save { |classname| classname.myfield = myfield.downcase }