私のコントローラーアクションでは、次のようになります。
def index
@articles = (params[:mine] == "true") ? current_user.articles : Article.search(params[:search])
@articles = @articles.sort! { |a,b| b.created_at <=> a.created_at }
@articles = Kaminari.paginate_array(@articles).page(params[:page]).per(25)
respond_to do |format|
format.html
format.json { render json: @articles }
end
end
そしてモデルでは:
def self.search(search)
if search.present?
where("category LIKE ? OR article_type LIKE ?", "%#{search}%","%#{search}%")
else
find(:all)
end
end
クエリでパラメータを直接使用すると、SQLインジェクションが可能になることを理解しています。ここでは、パラメータを直接whereクエリに渡しますArticle.search(params[:search])
。これはSQLインジェクションの傾向がありますか?もしそうなら、どうすればそれをより安全にすることができますか?また、コントローラーコードを正しく記述したかどうかにも疑問があります。コントローラコードのリファクタリングに関する提案があれば、私に知らせてください。彼らは非常に高く評価されます。どうもありがとう!