Rails,通过子created_at分配父母的分页,除非child.nil,由parent created_at命令

时间:2016-10-20 23:03:31

标签: ruby-on-rails

在我的video#index我试图按照其video个可选的子元素created_at的最新comment时间对video个对象进行排序,否则请按顺序排序父created_at元素 def index if params[:tag] @videos = Video.tagged_with(params[:tag]).page(params[:page]).per_page(10).order(created_at: "desc") else @videos = Video.all.page(params[:page]).per_page(10).order(created_at: "desc") end end

我正在重构......

typedef std::function<bool(Logger&)> FilterStdFunction;

但不确定如何构建所需的功能。

1 个答案:

答案 0 :(得分:0)

这里重构的第一步是在模型中创建范围来干掉它:

class Video
  scope :newest, ->{ order(created_at: :desc) }

  def self.paginate(page = 1, per_page: 10)
    self.page(page).per_page(10)
  end 
end

您可以通过改变变量来组成rails中的作用域:

@videos = Video.all
if params[:tag]
  @videos = @videos.tagged_with(params[:tag]) 
end

或者使用.merge.merge!

@videos = Video.paginate(params[:page]).tap.do |s|
  if params[:tag]
    s.merge!(Video.tagged_with(params[:tag]))
  else
    s.merge!(Video.newest))
  end
end