按布尔值排序范围(轨道模型)

时间:2013-11-07 12:32:40

标签: ruby-on-rails ruby sorting scope boolean

我有一个Pins模型生成的两个视图(user / show和pins / index)。

在users / show上,我想使用默认范围来显示所有引脚。 在pins / index上,我想使用featured_order范围在顶部显示“特色”引脚,然后继续默认范围。

这是我所拥有的,但由于某种原因,它将恢复到所有内容的默认范围。

class Pin < ActiveRecord::Base
  attr_accessible :content, :title

  belongs_to :user

  # for sorting featured and newest pins first
  default_scope order: 'created_at DESC'
  scope :featured_order, order('(case when featured then 1 else 0 end) DESC, created_at DESC')
end

在我的index.html.erb中,我渲染了一个部分(_pin.html.erb):

<%= render @pins %>

在我的show.html.erb中,我有一个列表:

<% @pins.each do |pin| %>
    <%= pin.title %>
    <%= pin.content %>
<% end %>

1 个答案:

答案 0 :(得分:3)

在索引控制器中

@pins = Pin.featured_order 

然后你可以迭代它。 这将按特色顺序排序,并在需要时使用default_scope。

如果这不起作用,最好的办法是创建范围,并根据需要使用而不是默认范围。

我总是偏向于使用default scope