在我的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;
但不确定如何构建所需的功能。
答案 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