我仍然是Rails的新手。我正在建立一个博客类型的网站,并希望我的一些帖子“粘性”,就像Wordpress stickies(坚持顶部)。
我知道您可以通过created_at
列订购帖子,这就是我现在正在做的事情。但是,无论created_at
日期是什么,我怎么能让我的“粘性”帖子保持在我的其他帖子之上?
当前代码:
@posts = Post.all.order('created_at desc')
现在一切正常。我的代码存在一个小问题
@posts = Post.order('sticky, created_at desc')
工作得很好..
答案 0 :(得分:1)
只需在您的sticky
模型中添加布尔属性Post
,然后执行:
@posts = Post.order('sticky, created_at desc')
答案 1 :(得分:0)
您有字符串属性:post_type (sticky, normal, or unpublished)
。如果您仍在使用字符串属性,请尝试以下操作:
@posts = Post.where('post_type not in (?)', 'unpublished').order('post_type desc, created_at desc')
注意:
.where('post_type not in (?)', 'unpublished')
.order('post_type desc, created_at desc')
post_type
降序(粘性,正常)和created_at
降序但不推荐,您应该使用布尔属性,例如
t.boolean :sticky
# sticky : true , normal : false
t.boolean :publish
# publish : true , unpublish : false
您可以在控制器上使用它:
@posts = Post.where(:publish => true).order('sticky DESC, created_at DESC')
参见示例:
答案 2 :(得分:0)
试试这个?
在控制器中:
@sticky_posts = Post.where(sticky: true)
@common_posts = Post.where(sticky: false).order('created_at DESC')
在视图中:
<%= render :partial => 'post', locals: {posts: @sticky_post %>
<%= render :partial => 'post', locals: {posts: @common_post %>
只需进行两次查询即可完成您想要的操作。