索引上的特色内容,rails 4 - postgreSQL Heroku

Featured content on index, rails 4 - postgreSQL Heroku

我设法让 post 成为特色(管理员端),但我在索引视图中显示它们时遇到了一些问题。

注意:使用 sqlite 可以正常工作,但是在使用 pg 的 heroku 上,不能按预期工作。

注2:featured_post为字符串(有"no"或"yes",默认为"no")

我的模型post.rb

    scope :featured, -> { order(featured_post: :asc, created_at: :desc).limit(100) } #pg
  else
    scope :featured, -> { order(featured_post: :desc, created_at: :desc).limit(100) } #sqlite
  end

我的控制器posts_controller.rb

    if params[:search]
      @posts = Post.search(params[:search]).order("created_at DESC").paginate(page: params[:page],  :per_page => 20)
    else  
      @posts = Post.all.featured
    end
  end

使用 SQLite,“特色 post” 显示在顶部,并且无论 post 是否较旧,都按 DESC 排序。所以它按预期工作,一切正常。例如:

  1. 标题一:21.12.2014 精选
  2. 标题二:09.22.2008 精选
  3. 标题三:02.01.2015(今天)
  4. 第四篇:2015 年 1 月 1 日(昨天)

精选 位于顶部并按日期排序(最近的精选在前)。

在 Heroku 上使用 PostgreSQL,它给我带来了一些问题。例如:

  1. 标题一:2015 年 1 月 2 日(今天)未精选(但显示在顶部)
  2. 标题二:21.12.2014 精选
  3. 标题三:09.22.2008 精选
  4. 第四篇:2015 年 1 月 2 日(今天)
  5. 第五篇:2015 年 1 月 1 日(昨天)

featured 在创建新 post(默认“无”特色)时不在顶部。如您所见,按日期排序是可以的,但是当创建新的 post 时,它“不会”保持在最前面。

不得不说我在 heroku postgresql 上尝试了 DESC 和 DESC 或 ASC 和 ASC 或 DESC 和 ASC 等,但没有成功。

经过半天的搜索并试图让 featured 帖子保持在顶部并按最近排序,我设法找到了解决方案(这不是最好的,但它是一个“暂时的解决方案”。这是我所做的:

型号post.rb

scope :featured, -> { where(featured_post: 'yes').order(created_at: :desc) }
scope :unfeatured, -> { where(featured_post: 'no').order(created_at: :desc) }

控制器posts_controller.rb

@posts_featured = Post.all.featured
@posts_unfeatured = Post.all.unfeatured

查看index.html.erb

精选

<% @posts_featured.each do |post| %>
  <header><h2 class="title"><%= link_to post.title, html_css_show_path(post) %></h2></header>
  <div><%= post.body %></div>
<% end %>

未精选

<% @posts_unfeatured.each do |post| %>
  <header><h2 class="title"><%= link_to post.title, html_css_show_path(post) %></h2></header>
  <div><%= post.body %></div>
<% end %>

这就成功了。同样,这不是一个很好的解决方案,但它暂时让我摆脱了问题。希望可以帮助别人。顺便说一句,我在 ruby 2.1.4.

上使用 rails 4.1.8