在我的模型(pins.rb)中,我有两个排序顺序:
default_scope order: 'pins.featured DESC' #for adding featured posts to the top of a list
default_scope order: 'pins.created_at DESC' #for adding the remaining posts beneath the featured posts
这种排序顺序(上方)是我希望“引脚视图”(index.html.erb)看起来的样子。这只是所有用户帖子的列表。
在我的“用户视图”(show.html.erb)中,我使用相同的模型(pins.rb)仅列出current_user引脚。但是,我想按排序顺序忽略“功能”默认作用域,而仅使用第二个作用域:
default_scope order: 'pins.created_at DESC'
我该怎么做?我试图做这样的事情:
default_scope order: 'pins.featured DESC', only: :index
default_scope order: 'pins.created_at DESC'
但是那不行...
更新
我更新了模型以定义范围:
scope :featy, order: 'pins.featured DESC'
default_scope order: 'pins.created_at DESC'
并将我的图钉视图更新为:
<%= render @pins.featy %>
但是,现在当我打开大头针视图时,出现错误:
undefined method `featy' for #<Array:0x00000100ddbc78>
我建议考虑做以下事情:
Pins.rb:
这将使该特征位于列表的顶部,并在创建它们时对它们进行第二种排序。(请注意两种按布尔值排序的方法)
class Pin < ActiveRecord::Base
belongs_to :user
default_scope order: 'created_at DESC'
# Method 1
scope :featy, order('featured DESC, created_at DESC')
# Method 2
# scope :featy, order('(case when featured then 1 else 0 end) DESC, created_at DESC')
end
User.rb:
class User < ActiveRecord::Base
has_many :pins
end
UsersController.rb:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
# Pins are accessed via: @user.pins
# These should be sorted by `created_at DESC` as that is the default_scope
end
end
users / show.html.erb:这是所有用户引脚,按以下类别排序created_at desc
<%= @user.pins %>
PinsController.rb:
class UsersController < ApplicationController
def index
# Pins sorted by created_at: @pins = Pin.all
# Pins sorted by created_at with all featured on top:
@pins = Pin.featy
end
end
pins / index.html.erb: 这是所有pin的排序方式created_at desc
,所有功能都位于顶部
<%= @pins %>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句