ruby-on-rails-3 - 导轨 : Make different references to a DB row refer to the same Ruby object

标签 ruby-on-rails-3

假设我有以下模型关系:

class Player < ActiveRecord::Base
  has_many :cards
end

class Card < ActiveRecord::Base
  belongs_to :player
end

我从this question知道Rails 将返回代表数据库行的对象的副本,这意味着:

p = Player.find(:first)
c = p.cards[0]
c.player.object_id == p.object_id # => false

...因此,如果 Player 模型修改 self,并且 Card 模型在同一请求中修改 self.player,则这些修改不会执行任何操作互相通知,最后保存的将覆盖其他的。

我想解决这个问题(大概使用某种形式的缓存),以便对具有给定 id 的 Player 的所有请求都将返回相同的对象(相同的 object_ids),从而允许两个模型编辑相同的对象无需执行数据库保存和重新加载。我有三个问题:

  1. 是否已有插件或 gem 可以执行此操作?
  2. 有什么充分的理由让我不应该这样做吗?
  3. 有人可以给我一些关于如何做到这一点的指导吗?

最佳答案

Rails 3.x 中支持此功能。例如,您可以将 :inverse_of 选项用于 has_many 关联。 Documentation here (搜索 :inverse_of双向关联)。

关于ruby-on-rails-3 - 导轨 : Make different references to a DB row refer to the same Ruby object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4068108/

相关文章:

ruby-on-rails-3 - 控制台中的 Rails3 验证正常在 test_helper 中失败

ruby-on-rails-3 - Rspec 应该在没有 lambda 的情况下更改计数

ruby-on-rails - 选择一个集合的补集

javascript - 有哪些代码质量/代码覆盖率工具可用于检查 Jasmine 中的 Javascript 测试?

css - 带有条件 CSS 文件的 Rails Asset Pipeline

t.date 属性小于当前年份的 SQL

ruby-on-rails-3 - 使用 rake 任务运行所有模型测试

ruby-on-rails - 如何在 Rails 3 中为日期字段编写 inclusion_of 验证器?

ruby-on-rails - 使用 Nokogiri 提取元素

ruby-on-rails - Rails,为什么此帮助程序不输出HTML,而是输出引号中的HTML?