Rails 7 中的无表模型

问题描述 投票:0回答:1

我正在将 Rails 应用程序从 Rails 3.2 升级到 Rails 7(不要问!!)。有一个无表模型正在使用这个gist,但它不再工作了。看起来这里的建议也不再有效。有人有可行的解决方案吗?

我已经尝试过

ActiveModel:API
,但我需要支持协会。

ruby-on-rails-7
1个回答
0
投票

ActiveModel::API

使用

ActiveModel::API
。它是 Rails 核心团队为此目的提供的官方模块。我知道你已经意识到了,你已经尝试过了。

但是,它不支持关联?

确实如此。在您的无状态模型中自行实现这些。

它可以非常简单,具体取决于这些无状态模型在您的遗留应用程序中的使用程度。只需确保定义无状态模型上调用的所有消息即可。

EG

class Person
  def pets
    @pets ||= []
  end
end

class Pet
end

bob = Person.new
dog_1 = Pet.new
bob.pets << dog_1

使用无状态模型有一个优点,它是一组熟悉的抽象,可以使遗留应用程序的维护成本更低。

Rails 不支持这种关联是有原因的。模型之间的关联完全耦合到 SQL 数据存储。两者缺一不可。因为它们是 SQL 中主键和外键的 Ruby 表示。

所以如果你想要这个,你就必须编写它的简单版本。

因为事实上这是一种不常见的方法。

© www.soinside.com 2019 - 2024. All rights reserved.