# Database Query on the fly Using Forms

**URL:** <https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707>\
**Category:** Rails\
**Created:** [December 20, 2005, 10:07am UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707 "2005-12-20T10:07:10Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Arik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@Arik](https://www.ruby-forum.com/u/Arik)\
**Post date:** [December 20, 2005, 10:07am UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707/1 "2005-12-20T10:07:10Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Arik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@Arik](https://www.ruby-forum.com/u/Arik)\
**Post date:** [December 20, 2005, 5:21pm UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707/2 "2005-12-20T17:21:55Z")

</div>

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](http://api.rubyonrails.com/classes/ActiveRecord/Base.html)

–Wilson.

---

<div class="post-metadata">

**Author:** ![Arik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@Arik](https://www.ruby-forum.com/u/Arik)\
**Post date:** [December 21, 2005, 4:52pm UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707/3 "2005-12-21T16:52:56Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Arik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@Arik](https://www.ruby-forum.com/u/Arik)\
**Post date:** [December 21, 2005, 5:35pm UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707/4 "2005-12-21T17:35:12Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Arik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@Arik](https://www.ruby-forum.com/u/Arik)\
**Post date:** [December 21, 2005, 5:29pm UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707/5 "2005-12-21T17:29:09Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Arik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@Arik](https://www.ruby-forum.com/u/Arik)\
**Post date:** [December 21, 2005, 5:47pm UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707/6 "2005-12-21T17:47:15Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Arik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@Arik](https://www.ruby-forum.com/u/Arik)\
**Post date:** [December 21, 2005, 6:41pm UTC](https://www.ruby-forum.com/t/database-query-on-the-fly-using-forms/50707/7 "2005-12-21T18:41:38Z")

</div>

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