Rails 3とActiveModelを使用しているので、自分自身を使用できません。ActiveModelベースのオブジェクト内の属性の値を取得するための構文。
次のコードでは、saveメソッドでself.first_nameはnilに評価され、@ attributes [:first_name]は'Firstname'(オブジェクトの初期化時にコントローラーから渡される値)に評価されます。
ActiveRecordではこれは機能するようですが、ActiveModelで同じクラスを構築する場合は機能しません。ActiveModelベースのクラスでアクセサーを使用してフィールドをどのように参照しますか?
class Card
include ActiveModel::Validations
extend ActiveModel::Naming
include ActiveModel::Conversion
include ActiveModel::Serialization
include ActiveModel::Serializers::Xml
validates_presence_of :first_name
def initialize(attributes = {})
@attributes = attributes
end
#DWT TODO we need to make sure that the attributes initialize the accessors properyl, and in the same way they would if this was ActiveRecord
attr_accessor :attributes, :first_name
def read_attribute_for_validation(key)
@attributes[key]
end
#save to the web service
def save
Rails.logger.info "self vs attribute:\n\t#{self.first_name}\t#{@attributes["first_name"]}"
end
...
end