2012-01-08 13 views
0

モデルのafter_validationコールバックでモデルの属性を変更しようとしていますが、すべての@attributesがnilを返しているため、メソッドは失敗します。after_validationブロックのモデルのアクセス属性

保存する前に、検証後にActiveRecordの@attributesにアクセスするにはどうすればよいですか? クラス内のメソッドからアクセスしようとしています。インスタンス変数に保存

class Business < ActiveRecord::Base 
      attr_accessible :latitude, :longitude 
      geocoded_by :address 
      after_validation :geocode 

      # Returns a human readable address from our various fields 
      def address 
       # All of these are nil when this gets called, from the geocode block which gets called by after_validation 
       [self.street + self.street2, self.city, self.state].compact.join(', ') 
      end 
    end   
+0

は、いくつかのコードを投稿してください。 –

+0

それほど多くは掲載されていませんが、確かに:) – 1dayitwillmake

答えて

1

動作するはずです:

after_validation {|x| @this = x; geocode} 

def address 
    [@this.street + @this.street2, @this.city, @this.state].compact.join(', ') 
end 
+0

この答えについてもう少し詳しく説明できますか(セマンティクス、このアプローチの背後にある考え方、私のアプローチがうまくいかない理由)? – 1dayitwillmake

+0

あなたのアプローチがうまくいかない理由はわかりません。私は基本的なafter_validationの実装をテストし、メソッド内でlogger.debug(self.content)を呼び出し、期待通りに機能しました。私の唯一の推測では、ジオコードはアトリビュートが表示されないようにしていますが、そのメソッドを見ることなく、わからないことがあります。つまり、ジオコードが何をしているかにかかわらずコンテンツを保持するインスタンス変数を作成し、オブジェクトのコンテンツではなく直接アクセスすると、問題が解決されるはずです。 – josephrider

関連する問題