0

我对 Rails 还是有点陌生​​。我正在建立一个博客类型的网站,并且想让我的一些帖子“具有粘性”,就像 Wordpress 便签(粘贴到顶部)一样。

我知道您可以按其created_at列排序帖子,这就是我现在正在做的。但是,无论created_at日期是什么,我如何让我的“粘性”帖子保持在我的其他帖子之上?

当前代码:

@posts = Post.all.order('created_at desc')

现在一切正常。我的代码有一个小问题

@posts = Post.order('sticky, created_at desc')

工作正常..

4

3 回答 3

1

sticky只需在模型中添加一个布尔属性Post,然后执行:

@posts = Post.order('sticky, created_at desc')
于 2013-07-17T02:42:47.213 回答
0

你有字符串属性:post_type (sticky, normal, or unpublished)。如果您仍在使用字符串属性,请尝试以下操作:

@posts = Post.where('post_type not in (?)', 'unpublished').order('post_type desc, created_at desc')

笔记 :

  1. .where('post_type not in (?)', 'unpublished')

    • 不显示帖子有未发布的 post_type。
  2. .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')

见例子:

Ruby on Rails 3.2.x - 粘性和发布帖子

于 2013-07-17T04:38:18.957 回答
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 %>

只需进行两次查询,它就可以做你想做的事。

于 2013-07-17T05:11:44.423 回答