我通常将ActiveModel :: Model包含在某些PORO中(例如对于FormObject :: SignUp)。我已经阅读了有关新的Rails 5 ActiveRecord :: Attribute API的内容,我认为我可以将它用于更简单的转换,但不是运气。
例如,给定
class FormObject::SignUp
include ActiveRecord::Model
include ActiveRecord::Attributes
attribute :birthday, :date
validates :birthday, presence: true
end
当我尝试实例化时,我遇到了NameError: undefined local variable or method `reload_schema_from_cache' for FormObjects::SignUp:Class
异常。
预计不会单独使用?感谢
答案 0 :(得分:2)
使用gem ActiveModelAttributes
是我能够找到的唯一方法。然后按照自述文件中的说明进行操作。
这是宝石:https://github.com/Azdaroth/active_model_attributes
旁注:我得到反馈,只有链接的答案才能消失。如果此链接消失,那么这个答案确实会变得无效,因为这可能意味着宝石已经存在了。
答案 1 :(得分:1)
如果查看Here's,似乎该模块不能单独使用,因为它做了很多假设(主要是关于模式支持的模型)。
即使您尝试使用documentation,您仍需要为其他类方法提供实现,例如attribute_types
。
在Rails 5中使用ActiveModel::Model
有什么问题?
class Poro
include ActiveModel::Model
attr_accessor :foo
end
答案 2 :(得分:1)
ActiveModel::Attributes
自Rails 5.2(PR)起可用。
尝试一下:
class FormObject::SignUp
include ActiveModel::Model
include ActiveModel::Attributes
attribute :birthday, :date
validates :birthday, presence: true
end
答案 3 :(得分:0)
我已经提交了一个问题,他们回复说目前不支持,但将来会有所支持。
链接:https://github.com/rails/rails/issues/28020#event-963668657