В Rails как использовать API атрибутов модели в модели без таблиц - PullRequest
1 голос
/ 09 апреля 2019

У меня есть модель без стола:

class SomeModel
    include ActiveModel::Model
    attribute :foo, :integer, default: 100
end

Я пытаюсь использовать атрибут из приведенной ниже ссылки, он отлично работает в обычных моделях, однако я не могу заставить его работать в модели без таблиц.

https://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html

Это вызывает неопределенность

Я пытался добавить атрибуты активной записи:

include ActiveRecord::Attributes

как включение, однако это вызывает другую ошибку, связанную со схемой.

Как мне использовать атрибут в модели без таблиц? Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Вам необходимо включить ActiveModel::Attributes

class SomeModel
  include ActiveModel::Model
  include ActiveModel::Attributes
  attribute :foo, :integer, default: 100
end

По некоторым причинам он не включен в ActiveModel::Model.Этот внутренний API был извлечен из ActiveRecord в Rails 5, поэтому вы можете использовать его с моделями без таблиц.

Обратите внимание, что ActiveModel::Attributes означает НЕ то же самое, что и ActiveRecord::Attributes.ActiveRecord::Attributes - более специализированная реализация, предполагающая, что модель поддерживается схемой базы данных.

0 голосов
/ 09 апреля 2019

Вы можете достичь того же с attr_writer

class SomeModel
  include ActiveModel::Model
  attr_writer :foo

  def foo
    @foo || 100
  end
end
...