ユーザーが投稿するアプリがあります。params[] ハッシュを介して渡された値に基づいて、さまざまな投稿を並べ替えて取得するフィルターがあります。明らかに存在するクラスメソッドでメソッドなしエラーが発生し続けます。これが私が実行しようとしているクエリです(posts_controller.rb):
def room
select_filter = params[:post_filter]
course_id = params[:id].to_i
@posts = Post.where_filter(select_filter, course_id).order_filter(select_filter).page(params[:page])
end
「select_filter」の値が 3 の場合は常にこのエラーが発生します。
undefined method `order_filter' for #<Array:0x007fa012d6eef8>
これが私のモデルです(post.rb、「select_filter」が3のときはいつでもエラーが発生することを覚えておいてください):
def self.where_filter(select_filter, course_id_params)
case select_filter.to_i
when 1
where('course_id = ?', course_id_params)
when 2
where('course_id = ?', course_id_params)
when 3
where('course_id = ? AND created_at > ?', course_id_params.to_i, 48.hours.ago.utc.to_s(:db))
.reject! {|i| i.net_reputation <= 0 }
else
where('course_id = ?', course_id_params)
end
end
def self.order_filter(select_filter)
case select_filter.to_i
when 1
order('created_at DESC')
when 2
sort_by {|i| i.net_reputation}
when 3
sort_by {|i| i.net_reputation}
else
order('created_at DESC')
end
end
奇妙なことに、これをコンソールで実行すると、すべて問題ありません。このような:
Post.where('course_id = ? AND created_at > ?', 10, 48.hours.ago.utc.to_s(:db)).reject {|i| i.net_reputation <= 0 }.sort_by {|i| i.net_reputation}
あらゆるご意見をお待ちしております。