2013-03-17 81 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