0

私はこのセットでいくつかのクラスを持っています:

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が含まれていることです。nil: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'
4

1 に答える 1

2

まず、initializeを上書きする場合は、superを呼び出す必要があります。これにより、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

Campaign.newただし、新しいレコードを作成するとき、およびCampaign.find ...データベースからレコードをロードするときに、validates_format_of_manyが呼び出されるので注意してください。

于 2013-03-17T13:34:03.177 に答える