【发布时间】:2020-04-09 10:37:39
【问题描述】:
在我们的 Rails 应用程序中,Post 资源可以由User 或Admin 创建。
因此,我们有一个名为 Post 的 ActiveRecord 模型类,带有 belongs_to :author, polymorphic: true。
但是,在某些情况下,系统本身应该能够创建帖子。
因此,我正在寻找一种添加方法,例如System 为 author。
显然,System 永远只有一个,因此它不会存储在数据库中。
天真地尝试添加class System; end 的实例(例如单例实例),因为作者返回NoMethodError: undefined method `primary_key' for System:Class 之类的错误。
解决这个问题最干净的方法是什么?
有没有办法编写一个实际上不属于数据库的“假”ActiveRecord 模型?
【问题讨论】:
-
这不是 Active Record 的问题,而是数据库的问题。您必须为
posts表提供一些外键。因此,其中一个解决方案是(通过种子)创建名为“系统”的第一个管理员并将其用作“系统”作者。 -
您可以向您的
Post模型添加一个名为created_by_system的布尔属性。然后您必须将optional: true添加到您的belongs_to :author关联中,以便可以将关联留空。
标签: ruby-on-rails singleton rails-activerecord