首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保持具有相同id的ActiveRecord对象在内存中分离

问如何保持具有相同id的ActiveRecord对象在内存中分离
EN

Stack Overflow用户
提问于 2011-12-11 15:13:45
回答 2查看 177关注 0票数 0

Rails 3.1。这是我的模特

代码语言:javascript
复制
class Cookbook
  has_many :recipes, :include => :ingredients
end

class Recipe
  belongs_to :cookbook
  has_many :ingredients
end

class Ingredient
  belongs_to :recipe
end

我有这些数据

代码语言:javascript
复制
Cookbook (id: 1)
  Recipe "Pizza" (id: 1)
    Ingredient "Tomato" (id: 1)
    Ingredient "Cheese" (id: 2)
  Recipe "Spaghetti" (id: 2)
    Ingredient "Tomato" (id: 1)
    Ingredient "Pasta" (id: 3)

现在让我们以ActiveRecord对象的形式加载数据

代码语言:javascript
复制
# Eager load all recipes and ingredients
cookbook = Cookbook.includes(:recipes).find(1)

pizza = cookbook.recipes[0]
tomato_for_pizza = pizza.ingredients.first

spaghetti = cookbook.recipes[1]
tomato_for_spaghetti = spaghetti.ingredients.first

但是,我想在其中一个ActiveRecord对象上设置一个标志,但不希望它影响具有相同id的另一个ActiveRecord对象。

代码语言:javascript
复制
tomato_for_pizza.in_stock = true
tomato_for_spaghetti.in_stock     # true, but should be false (default)

换句话说,我希望Ingredient对象(尽管它们都具有相同的id,并且在数据库中表示相同的数据)作为单独的对象加载到内存中。用RSpec语言

代码语言:javascript
复制
tomato_for_pizza.object_id.should_not == tomato_for_spaghetti.object_id

我的问题是:这有可能吗?还是有别的办法可以让我这么做?

EN

回答 2

Stack Overflow用户

发布于 2011-12-11 15:17:46

可以使用clone方法克隆对象。更多信息来自红宝石医生。

如果要克隆所需的对象,则克隆将包含相同的信息,但object_id将有所不同。

票数 0
EN

Stack Overflow用户

发布于 2011-12-11 15:20:56

我认为,你需要创建另一个模型

代码语言:javascript
复制
class RecipeIngredients < ActiveRecord::Base
  belongs_to :recipe
  belongs_to :ingredient

  attr_accessible :in_stock
end

希望这能回答你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8465024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档