我有一个这样的无表模型:
class SomeModel
include ActiveModel::Model
attribute :foo, :integer, default: 100
end
我正在尝试使用以下链接中的属性,该属性在普通模型中可以正常使用,但是无法在无表模型中使用。
https://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html
这将导致未定义
我尝试添加活动记录属性:
include ActiveRecord::Attributes
也作为包含内容,但这会导致与架构相关的其他错误。
如何在无表模型中使用该属性?谢谢。
答案 0 :(得分:1)
class SomeModel
include ActiveModel::Model
include ActiveModel::Attributes
attribute :foo, :integer, default: 100
end
由于某种原因,它未包含在ActiveModel::Model
中。该内部API是从Rails 5的ActiveRecord中提取的,因此您可以将其用于无表模型。
请注意,ActiveModel::Attributes
与ActiveRecord::Attributes
是不相同的内容。 ActiveRecord::Attributes
是一种更专业的实现,它假定模型由数据库模式支持。
答案 1 :(得分:0)
您可以使用attr_writer
class SomeModel
include ActiveModel::Model
attr_writer :foo
def foo
@foo || 100
end
end