急于加载不在Rails 2.2.2中工作

时间:2009-05-11 08:55:08

标签: ruby-on-rails activerecord include associations eager-loading

我正在使用类似于以下的模型:

class Owner < ActiveRecord::Base
  has_many :owned
end

class Owned < ActiveRecord::Base
  belongs_to :owner
end

您可以假设owned_id和owner_id位于正确的位置。问题是,在应用程序中用于不同mvc链的控制器中

@owner = Owned.find_by_id(owned_id, :include => :owner)

不起作用。我自然得到owner_id,列,但不能那么做

@owned.owner # is just nil

是什么给出的?我的意思是,我可以在将结果传递给视图之前直接进行分配:

@owned.owner = Owner.find_by_id(@owned.owner_id)

但这看起来很傻。来吧,让我难堪。我错过了哪些显而易见的事情?这适用于我的应用程序的其他地方,但我无法发现差异。有一些常见的陷阱吗?一切都有帮助。

谢谢

2 个答案:

答案 0 :(得分:1)

我一直在赢。相应的“所有者”对象已从所有者表中删除。

有趣的是,在我创建帐户之前,我在基于cookie的身份上有大量的业力。然后我的饼干变得腐败了,除了愚蠢的问题我什么都不会问,我的业力就在1.哦。好吧。

答案 1 :(得分:1)

StackOverflow上的信誉不是基于cookie的。您可能需要重新登录或其他内容。

您的问题似乎暗示您在所有者表中有own_id字段。你不需要它,应该删除它。

您只需要拥有的表中的owner_id整数字段。

您可以通过多种方式访问​​您的记录和关系。首先让我们首先访问所有者记录。

owner = Owner.find(owner_id)
owned = owner.owned # this is an array since you a 'has_many' relationship

通常,您希望以下列方式访问拥有的记录:

for owned in owner.owned
 puts owned.name # or access any other attributes
end

如果您想首先访问拥有的记录,可以执行以下操作:

@owned = Owned.find(:all, :conditions => [ "owner_id = ?", owner_id ])
# @owned is an array so you need to iterate through it
for owned in @owned
  puts owned.owner.name # or access any other attribute from the owner
end

一旦您的查询工作正常,您可以通过在查找语句中添加:include来担心急切加载。请注意,这可能对优化感兴趣,但从开始就没有必要。

我希望这会有所帮助。