我正在使用类似于以下的模型:
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)
但这看起来很傻。来吧,让我难堪。我错过了哪些显而易见的事情?这适用于我的应用程序的其他地方,但我无法发现差异。有一些常见的陷阱吗?一切都有帮助。
谢谢
答案 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来担心急切加载。请注意,这可能对优化感兴趣,但从开始就没有必要。
我希望这会有所帮助。