如何限制多个关系中返回的行数?例如:
class User < ActiveRecord::Base
has_many :photos
end
我希望能够做到:
User.includes(:photos => {:limit => 8}).all
这显然不起作用,但具有此功能的东西。我是否需要自己编写SQL?
提前致谢!
编辑: 我不想限制关联,只是查询结果。所以一个用户可能有一千张照片,我只想要返回前三名。
答案 0 :(得分:10)
您不必对模型中的限制进行硬编码。你可以致电@user.photos.limit(8)
。您还可以调用@user.photos.scoped
来获取延迟加载的范围对象。从@user.photos
返回的东西可能看起来非常非常像Array
,但它不是 - 它对你而言!
请参阅http://apidock.com/rails/ActiveRecord/Associations/CollectionProxy进行兔子洞的有趣之旅 - 您回来的事情是委派几乎所有标准物体检查电话(class
,singleton_class
,{{1 }},methods
等)到method
对象,但它将一组调用委托给Array
对象。这就是为什么如果你打电话给ActiveRecord::Associations::*
它会告诉你它正在使用@user.photos.method(:<<)
,但实际上并没有使用它 - 它正在使用#<Method: Array#<<>
中的那个!
答案 1 :(得分:2)
您可以在实际的:limit
声明中添加has_many
。
class User < ActiveRecord::Base
has_many :photos, :limit => 8
end
答案 2 :(得分:2)
只需向has_many关联添加限制选项:
class User < ActiveRecord::Base
has_many :photos, :limit => 8
end
修改强>
根据您的需求:
class User < ActiveRecord::Base
has_many :all_photos, :class_name => "Photo"
has_many :photos, :limit => 8
end
注意:在all_photos协会中将'class'更改为'class_name'