Database Query on the fly Using Forms


#1

I am a freshman when it comes to RoR, and I haven’t been able to figure
this out. I need to figure out how to query records in my database using
form check boxes (or radio buttons) then display them in that same
instance. What would this look?

I have been told that just putting a question mark after here,
:conditions => field = ?, but what would the argument look like?

Thanks in advance.


#2

One handy way is to use named parameters in the ‘conditions’ option:
Something.find(:all, [“blah = :foo or honk = :beep or other = :foo”,
params])
If you name your form fields “foo” and “beep”, such that params[:foo]
and params[:beep] give you the values you’re looking for, that find()
call will ‘just work’.

The documentation for ‘conditions’ is at the top of this page:
http://api.rubyonrails.com/classes/ActiveRecord/Base.html

–Wilson.


#3

This worked well for me (after some trial and error).

Only slightly OT, how do you use these Named Variables and perform a
‘like’
query? Using ‘=’ works no problem, but I receive strange results when I
use
something like:

:conditions => [“FirstName like :firstname%”, {:firstname => firstname}]

ActiveRecord seems to put the ‘%’ symbol outside of the quoted value,
causing a SQL error.

Grant


#4

Thanks for the tip there Nic. Worked for me.

Like yourself, I’m curious if this is the only way, or if there is a
‘rails
way’ of doing this.

Grant


#5

I had to append the ‘%’, something like …{firstname => firstname}+’%’

The syntax isn’t correct, but you get the idea. Anybody have any
better suggestions?

  • Nic.

#6

If you need that kind of thing, you’re perhaps better off modifying
the params before passing them to the find().
e.g.
params[:firstname] += ‘%’
…which will append a % sign to the end of the value of :firstname.


#7

find :all, :conditions => [“name LIKE ?”, “%#{params[:name]}%”]