索引上的特色内容,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 排序。所以它按预期工作,一切正常。例如:
- 标题一:21.12.2014 精选
- 标题二:09.22.2008 精选
- 标题三:02.01.2015(今天)
- 第四篇:2015 年 1 月 1 日(昨天)
精选 位于顶部并按日期排序(最近的精选在前)。
在 Heroku 上使用 PostgreSQL,它给我带来了一些问题。例如:
- 标题一:2015 年 1 月 2 日(今天)未精选(但显示在顶部)
- 标题二:21.12.2014 精选
- 标题三:09.22.2008 精选
- 第四篇:2015 年 1 月 2 日(今天)
- 第五篇: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
我设法让 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 排序。所以它按预期工作,一切正常。例如:
- 标题一:21.12.2014 精选
- 标题二:09.22.2008 精选
- 标题三:02.01.2015(今天)
- 第四篇:2015 年 1 月 1 日(昨天)
精选 位于顶部并按日期排序(最近的精选在前)。
在 Heroku 上使用 PostgreSQL,它给我带来了一些问题。例如:
- 标题一:2015 年 1 月 2 日(今天)未精选(但显示在顶部)
- 标题二:21.12.2014 精选
- 标题三:09.22.2008 精选
- 第四篇:2015 年 1 月 2 日(今天)
- 第五篇: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