我正在构建一个用户可以发布的应用程序。每个帖子都被赞成和反对。在显示帖子的地方,我有一个允许用户过滤帖子的小表单。它只是将一个参数传递给名为 params[:post_filter] (localhost:3000/somepage?post_filter=value) 的 url。现在,这工作得很好,很花哨,除了我写的修改查询的私有方法不起作用。
这是我的查询:
def room
@posts = Post.where('lesson_id = ?', params[:id]).order(post_filter_params).page(params[:page]).per(30)
end
这是我的私人方法:
private
def post_filter_params
chosen_option = params[:post_filter].to_i == 1 or 2 or 3 ? params[:post_filter] : '1'
case chosen_option
when 1
'created_at DESC'
when 2
'upvotes DESC'
when 3
'downvotes DESC'
end
end
现在,每当我用我的私有方法中的一个字符串替换 .order() 值时,一切都按计划进行。但是,将私有方法名称放在 .order() 值中不起作用。关于发生了什么的任何想法?
编辑
为了确保所有值都是相同的数据类型,我这样做了,但它仍然不起作用:
def post_filter_params
param_option = params[:post_filter].to_i
chosen_option = param_option == 1 or 2 or 3 ? param_option : 1
case chosen_option
when 1
'created_at DESC'
when 2
'(upvotes - downvotes) DESC'
when 3
'downvotes DESC'
end
end