And*_*rew 48 sql ruby-on-rails ruby-on-rails-3
我的应用拥有属于用户的照片.
在照片#show视图中,我想显示"来自此用户的更多内容",并显示该用户的下一张和上一张照片.我会很好,这些是id
顺序的下一张/上一张照片或下一张/上一张照片created_at
.
您如何为下一张/上一张照片或多张下一张/上一张照片撰写此类查询?
Har*_*tty 93
试试这个:
class User
has_many :photos
end
class Photo
belongs_to :user
def next
user.photos.where("id > ?", id).first
end
def prev
user.photos.where("id < ?", id).last
end
end
Run Code Online (Sandbox Code Playgroud)
现在你可以:
photo.next
photo.prev
Run Code Online (Sandbox Code Playgroud)
Cre*_*emz 18
它也引导我解决我的问题.我试图为一个项目制作下一个/上一个,没有涉及任何关联.最后在我的模型中做了类似的事情:
def next
Item.where("id > ?", id).order("id ASC").first || Item.first
end
def previous
Item.where("id < ?", id).order("id DESC").first || Item.last
end
Run Code Online (Sandbox Code Playgroud)
这样它就会循环,从最后一个项目到第一个项目,反之亦然.我之后只是打电话给@item.next
我的意见.
不确定这是否是Rails 3.2+中的更改,而不是:
model.where("id < ?", id).first
Run Code Online (Sandbox Code Playgroud)
为了以前.你必须做
.where("id > ?", id).last
Run Code Online (Sandbox Code Playgroud)
似乎"order by"是错误的,所以首先给你DB中的第一条记录,因为如果你有3项低于当前的[1,3,4],那么"first"就是1,但是最后一个是你正在寻找的那个.您也可以在where之后应用排序,但这是一个额外的步骤.
归档时间: |
|
查看次数: |
20344 次 |
最近记录: |