limit the number of objects returned in a has_many

坚强是说给别人听的谎言 提交于 2019-11-29 06:24:52
ronnieonrails

Just add a limit option to the has_many association:

class User < ActiveRecord::Base
  has_many :photos, :limit => 8
end

EDIT

According to your needs:

class User < ActiveRecord::Base
  has_many :all_photos, :class_name => "Photo"
  has_many :photos, :limit => 8
end

note: changed 'class' to 'class_name' in the all_photos association

You don't have to hard code the limit in the model. You can call @user.photos.limit(8). You can also call @user.photos.scoped to get a scope object that does lazy loading. The thing returned from @user.photos may look very, very much like an Array, but it's not - it lies to you!

See http://apidock.com/rails/ActiveRecord/Associations/CollectionProxy for an interesting trip into the rabbit hole - the thing you get back is delegating pretty much all of the standard object inspection calls (class, singleton_class, methods, method, etc.) to an Array object, but it's delegating a certain set of calls to an ActiveRecord::Associations::* object. That's why if you call @user.photos.method(:<<) it will tell you it's using #<Method: Array#<<>, but it's not actually using that - it's using the one in ActiveRecord::Associations::CollectionProxy!

You can put a :limit on the actual has_many declaration.

class User < ActiveRecord::Base
  has_many :photos, :limit => 8
end
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!