вопросы о безбалансовой колонке для ActiveRecord - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть вопрос об 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

Это решение кажется довольно многословным, и мне интересно, есть ли лучшие из них.

1 Ответ

3 голосов
/ 17 декабря 2010

Мне кажется, я видел это в каком-то плагине аутентификации для отправки подтверждения пароля на модель, не сохраняя его в БД, поэтому вы можете просто добавить к своей модели:

attr_accessor :accepted_license

И теперь вы можете использовать его с проверкамии формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...