ruby on rails - dynamically insert greater than > | less than < | equals to = operators into a query -


my app allows filtering via get.

www.mysite.com/rating=5 www.mysite.com/rating>5 www.mysite.com/rating<5 

i can split params[:filter] into:

  • column (filter)
  • value (5)
  • operator (=,>,<)

so after queried laptop model , did basic ordering, filter results if set.

if params[:filter] != "all"   .   .   case operator     when "="       laptops = laptops.where("laptops.rating = ?", value)     when ">"       laptops = laptops.where("laptops.rating > ?", value)     when "<"       laptops = laptops.where("laptops.rating < ?", value)   end end 

i wondered if there way add operator dynamically similar value. when add >=, <= code gets repeated 5 times!

i tried:

laptops.where("laptops.rating ? ?", operator, value) 

but added operator string, naturally resulted in error

syntax error: near "laptops.rating '>' '6'"

any ideas how can make code more dry?

using postgresql

you try:

if params[:filter] != "all"   .   .   # if statement makes sure operator 1 of valid operators   if ["<",">",">=","<=","="].include? operator     laptops = laptops.where("laptops.rating #{operator} ?", value)   end  end 

using ? in query tells rails parameter should escaped before inserted query practice. - if first sanitze / validate operator variable make sure contains valid characters should fine inserting directly query.

that's why rails tells you:

syntax error: near "laptops.rating '>' '6'" 

because > character escaped '>' , no longer valid sql-operator.


Comments

Popular posts from this blog

c# - How to get the current UAC mode -

postgresql - Lazarus + Postgres: incomplete startup packet -

javascript - Ajax jqXHR.status==0 fix error -