可以在PORO中使用新的ActiveRecord :: Attributes API吗?

时间:2017-02-15 14:45:16

标签: ruby-on-rails rails-activerecord ruby-on-rails-5

我通常将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异常。

预计不会单独使用?感谢

4 个答案:

答案 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