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

我覺得我看到了它在發送密碼確認沒有saveing它dB到模型的一些認證插件,所以你可以添加到模型:

attr_accessor :accepted_license 

現在你可以驗證使用它,形式。