2010-12-16 5 views
0

ActiveRecord에 대한 질문이 있습니다. 여러분 중 누구도 나를 조금 도울 수 있기를 바랍니다. 미리 감사드립니다 :).ActiveRecord에 대한 테이블이없는 열에 관한 질문

나는 ActiveRecord 모델에 사용 허가 여부를 나타내는 부울 필드가 있습니다. 그와 관련된 데이터베이스 열을 만들고 싶지는 않지만 ActiveRecord에서 제공하는 모든 유효성 검사 항목 및 형식 변환을 사용하고 싶습니다. 웹상에는 많은 솔루션들이 있지만 테이블 모델 (예 : http://railscasts.com/episodes/193-tableless-model)에 초점을 맞추고있는 반면, 모델에는 테이블 열에 해당하는 다른 필드가 있습니다. 다음은 내가 생각해내는 것입니다.

class User < ActiveRecord::Base 
    include TablelessColumns 

    tableless_column :license_accepted, :boolean 

    # other fields that are corresponding to table columns 
end 

module TablelessColumns 
    def self.included(base) 
    base.extend(ClassMethods) 
    end 

    module ClassMethods 
    def tableless_columns 
     read_inheritable_attribute(:tableless_columns) 
    end 

    def tableless_column(name, sql_type = nil, default = nil, null = true) 
     write_inheritable_attribute(:tableless_columns, {}) if tableless_columns.nil? 
     tableless_columns[name] = ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null) 

     define_method("#{name.to_s}=".to_sym) { |value| instance_variable_set(to_variable(name), value) } 
     define_method(name) { self.class.tableless_columns[name].type_cast(instance_variable_get(to_variable(name))) } 
    end 
    end 

    def to_variable(sym) 
    "@#{sym.to_s}".to_sym 
    end 
end 

이 솔루션은 꽤 장황한 것처럼 보이고 거기에 더 좋은 것이 있는지 궁금합니다.

답변

3

난 내가 뭔가를 dB로 saveing없이 모델링 암호 확인을 보내기위한 몇 가지 인증 플러그인에서 그것을 본 것 같아요, 그래서 당신은 당신의 모델에 추가 할 수 있습니다

attr_accessor :accepted_license 

을 그리고 지금 당신이 검증와 함께 사용할 수 있으며, 양식.