2013-03-17 87 views
0

我有一些類這一套:初始化類錯誤 - Rails的

class Campaign < ActiveRecord::Base 

    belongs_to :user 
    validates_presence_of :title, :description 

    def initialize 
    validates_format_of_many([:title, :description]) 
    end 

    def validates_format_of_many(inputs) 
    if (!inputs.nil?) 
     inputs.each do |input| 
     validates_format_of input => /^[.]/, :allow_nil => false, :allow_blank => false 
     puts YAML::dump('test1') 
     end 
    else 
     puts YAML::dump('test2') 
    end 
    end 
end 

的問題是,我得到一些錯誤信息undefined method包括「?對於零:NilClass` 並且堆疊

/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.14/lib/active_record/attribute_methods.rb:257:in `method_missing' 
/var/www/gitorious/app/models/campaign.rb:13:in `validates_format_of_many' 
/var/www/gitorious/app/models/campaign.rb:12:in `each' 
/var/www/gitorious/app/models/campaign.rb:12:in `validates_format_of_many' 
/var/www/gitorious/app/models/campaign.rb:7:in `initialize' 
/var/www/gitorious/app/controllers/campaigns_controller.rb:28:in `new' 
/var/www/gitorious/app/controllers/campaigns_controller.rb:28:in `new' 
+0

都能跟得上它不加載記錄時工作 – user1611830 2013-03-17 13:31:39

+0

看到我的回答以下,更完整,希望能幫到 – Benj 2013-03-17 13:34:37

回答

2

首先如果覆蓋初始化,你應該叫超,這將允許super_class執行其初始化任務

def initialize 
    validates_format_of_many([:title, :description]) 
    super 
end 

但建議AR使用回調。檢查http://guides.rubyonrails.org/active_record_validations_callbacks.html

例子:

class Campaign < ActiveRecord::Base 

    belongs_to :user 
    validates_presence_of :title, :description 

    after_initialize { validates_format_of_many([:title, :description]) } 

    def validates_format_of_many(inputs) 
    if (!inputs.nil?) 
     inputs.each do |input| 
     validates_format_of input => /^[.]/, :allow_nil => false, :allow_blank => false 
     puts YAML::dump('test1') 
     end 
    else 
     puts YAML::dump('test2') 
    end 
    end 
end 

但要小心事業創造了新的記錄,當你validates_format_of_many將呼籲Campaign.new,也爲Campaign.find ...從數據庫

+0

非常感謝你! – user1611830 2013-03-17 14:24:49