Ruby on rails Rails jQuery数据表,按定义/计算属性排序
我有一个模型具有Ruby on rails Rails jQuery数据表,按定义/计算属性排序,ruby-on-rails,datatables,Ruby On Rails,Datatables,我有一个模型具有num\u likes和num\u views属性 以下内容将用于订购它们 @models = Model.all ## this may not be "all" so I dont want to use scope @models.order({'num_likes': 'desc'}) 如果我定义了方法 def like_pct num_likes / num_views end 那么jQuery DT不能正确地按此排序,因为它不在数据库中 我怎样才能按这个属
num\u likes
和num\u views
属性
以下内容将用于订购它们
@models = Model.all ## this may not be "all" so I dont want to use scope
@models.order({'num_likes': 'desc'})
如果我定义了方法
def like_pct
num_likes / num_views
end
那么jQuery DT不能正确地按此排序,因为它不在数据库中
我怎样才能按这个属性订购
以下是实际控制器代码:
@pages = some_filtered_pages_collection
# Sort based on requested column
params[:order].each do |i, order|
column = order[:column]
sort_column = params[:columns][column][:data] # This is the attr name being sorted
sort_order = order[:dir] # asc or desc
@pages = @pages.order([[sort_column, sort_order]].to_h)
end
虽然您可以从使用ActiveRecord的
order
方法切换到使用原生Ruby的sort
方法,但让DB服务器来完成这项工作可能比Rails服务器更好
由于您的like_pct方法仅在Rails服务器和DB服务器中定义,显然我们无法使用该方法来完成此任务
下面是我的方法。请注意,我假设您使用的是PostgreSQL server,我不知道这是否适用于您的特定SQL方言
params[:order].each do |i, order|
column = order[:column]
sort_column = params[:columns][column][:data] # This is the attr name being sorted
sort_column = '(num_likes / num_views)' if sort_column = 'like_pct'
sort_order = order[:dir] # asc or desc
@pages = @pages.order("#{sort_column} #{sort_order}")
end
请注意,要使其工作,您需要将order方法从使用散列语法更改为字符串语法,否则ActiveRecord将把查询转换为orderbypages.(num\u likes/num\u views).
,这显然不起作用