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
이 솔루션은 꽤 장황한 것처럼 보이고 거기에 더 좋은 것이 있는지 궁금합니다.