0

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

class Owner < ActiveRecord::Base
  has_many :owned
end

class Owned < ActiveRecord::Base
  belongs_to :owner
end

您可以假定 own_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)

但这似乎很愚蠢。来吧,让我难堪。我错过了什么明显的事情?这适用于我的应用程序的其他地方,但我无法发现差异。有一些常见的陷阱吗?任何事情都有帮助。

谢谢

4

2 回答 2

1

我只是继续赢。相应的“所有者”对象已从所有者表中删除。

有趣的是,在我创建帐户之前,我的基于 cookie 的身份有很多业力。然后我的 cookie 损坏了,我只能问愚蠢的问题,我的业力是 1。哦,好吧。

于 2009-05-11T09:16:43.067 回答
1

StackOverflow 上的声誉不是基于 cookie。您可能需要重新登录或其他方式。

您的问题似乎暗示您在 owner 表中有一个owned_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

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

我希望这有帮助。

于 2009-05-11T10:08:04.763 回答