2011-04-08 55 views
3

为什么是它轨多态查询

@discussions = Discussion.where(:discussable => @discussable) 

不起作用。但这项工作:

@discussions = Discussion.where(:discussable_id => @discussable.id, :discussable_type => @discussable.class.to_s) 

谢谢。

回答

1

因为在第一个中传递了一个完整的模型实例。该属性必须是一个id(整数),并传递一个对象。第二个是好的,因为你传递了id(正确)。

+3

我想轨释放比聪明我猜这里的方法比查找更严格,谢谢! – randomor 2011-04-08 02:23:54

+0

实际上有一个原因,传递一个对象可以通过序列化来完成,这就是为什么一个整数必须是一个整数:) – Spyros 2011-04-08 02:26:06

+0

当你有这个时候,这是相当尴尬和呆滞的在每次查询po时指定_id和_type形态联想。我虽然Rails可以更聪明,并检测到这种情况。 – 2012-10-23 13:40:53