我有一个 has_many 关系,我想设置自定义限制和偏移量。以及计算它们
嘿,
我的代码:
@profile.images
我想一次只获取 10 个图像,偏移量为 10,像这样
@profile.images(:limit => 10, :offset => 10)
而不是这样
has_many :images, :limit => 10, :offset => 10
然后我想以某种方式计算该配置文件的所有图像。
@profile.count_images
谢谢(:
has_many :images, :foreign_key => 'on_id', :conditions => 'on_type = "profile"' do
def paginate(page = 1, limit = 10, offset = nil)
page = nil if page < 1
limit = 1 if limit < 1
offset = 0 if(offset && offset < 0)
offset = 0 if (!page)
offset = limit * (page - 1) if (page)
all(:limit=> limit, :offset => offset)
end
结束
现在我想将此行为添加到其他 has_many 关系中。但我不想复制粘贴代码......有什么想法吗?:P
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用关联扩展:
现在您可以使用
page
方法,如下所示:编辑
在这种特定情况下,关联功能可能是一个合适的选择。即使带有named_scope 的lambda 也可以工作。如果您在
Profile
类上定义它,您就会失去named_scope
的可重用性。您应该在图像类上定义named_scope。现在您可以将这个named_scope与关联一起使用:
或者您可以直接在
Image
类上使用named_scope另一方面,为什么不使用will_paginate 插件?
Use association extensions:
Now you can use the
page
method as follows:Edit
In this specific case, association function might be a suitable option. Even lambda with named_scope might work. If you define it on the
Profile
class you are loosing the reusable aspect of thenamed_scope
. You should define the named_scope on your image class.Now you can use this named_scope with the association:
Or you can use the named_scope directly on the
Image
classOn the other hand, why are you not using the will_paginate plugin?
您可以使用
with_scope
将调用范围限定为@profile.images
,并在范围外执行计数。You can use
with_scope
to scope your call to@profile.images
, and perform the count outside the scope.