ユーザーが投稿できるアプリを構築しています。各投稿は、賛成票と反対票を投じることができます。投稿が表示される場所には、ユーザーが投稿をフィルタリングできる小さなフォームがあります。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() 値をプライベート メソッドの文字列の 1 つに置き換えると、すべてが計画どおりに機能します。ただし、プライベート メソッド名を .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