2010-12-16 6 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 

そして今、あなたは検証とそれを使用することができますし、フォーム。