# Find conditions issue

**URL:** <https://www.ruby-forum.com/t/find-conditions-issue/185987>\
**Category:** Rails\
**Created:** [March 30, 2010, 5:13am UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987 "2010-03-30T05:13:20Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![laa018](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/c68b51/32.png) [@laa018](https://www.ruby-forum.com/u/laa018)\
**Post date:** [March 30, 2010, 5:13am UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987/1 "2010-03-30T05:13:20Z")

</div>

I am making a search to look through my database at a string that I  
enter into a text field. I got it to work properly if I enter in the  
exact title but I wanted to see if I could find database entries with  
similar titles.

I currently have this code that works:  
@find = Product.find(:first, :conditions =\> [“title = ‘#{name}’”])  
So when I enter in “Rolling Rock” it finds that name in the database

What I want to do now is if I enter in “Rolling” it will still find  
Rolling Rock. I tried the following but it doesn’t work:  
@find = Product.find(:first, :conditions =\> [“title.include?  
‘#{name}’”])

I get this error:  
ActiveRecord::StatementInvalid in SearchController#results  
Mysql::Error: You have an error in your SQL syntax; check the manual  
that corresponds to your MySQL server version for the right syntax to  
use near ‘include’#{name}’) LIMIT 1’ at line 1: SELECT \* FROM  
`products` WHERE (title include’#{name}’) LIMIT 1

Any clue how to find the entry with only the partial name?

Thanks for any help!

---

<div class="post-metadata">

**Author:** ![laa018](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/c68b51/32.png) [@laa018](https://www.ruby-forum.com/u/laa018)\
**Post date:** [March 30, 2010, 5:30am UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987/2 "2010-03-30T05:30:00Z")

</div>

Quoting Leah A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Rolling Rock. I tried the following but it doesn’t work:  
> @find = Product.find(:first, :conditions =\> [“title.include?  
> ‘#{name}’”])
> 
> I get this error:  
> ActiveRecord::StatementInvalid in SearchController#results  
> Mysql::Error: You have an error in your SQL syntax; check the manual  
> that corresponds to your MySQL server version for the right syntax to  
> use near ‘include’#{name}‘) LIMIT 1’ at line 1: SELECT \* FROM  
> `products` WHERE (title include’#{name}') LIMIT 1

@find = Product.find(:first, :conditions =\> [“title like ‘?’”,  
“%#{name}%”])

This code is untested, but I would expect to work.

Jeffrey

---

<div class="post-metadata">

**Author:** ![laa018](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/c68b51/32.png) [@laa018](https://www.ruby-forum.com/u/laa018)\
**Post date:** [March 30, 2010, 5:44am UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987/3 "2010-03-30T05:44:38Z")

</div>

Jeffrey L. Taylor wrote:

> Quoting Leah A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > Rolling Rock. I tried the following but it doesn’t work:  
> > @find = Product.find(:first, :conditions =\> [“title.include?  
> > ‘#{name}’”])
> > 
> > I get this error:  
> > ActiveRecord::StatementInvalid in SearchController#results  
> > Mysql::Error: You have an error in your SQL syntax; check the manual  
> > that corresponds to your MySQL server version for the right syntax to  
> > use near ‘include’#{name}‘) LIMIT 1’ at line 1: SELECT \* FROM  
> > `products` WHERE (title include’#{name}') LIMIT 1
> 
> @find = Product.find(:first, :conditions =\> [“title like ‘?’”,  
> “%#{name}%”])
> 
> This code is untested, but I would expect to work.
> 
> Jeffrey

Thanks for the help Jeffrey but I still get the same error that I posted  
above. I altered your code to this:  
@find = Product.find(:all, :conditions =\> [“title LIKE ‘#{name}’”])  
and got it to work when I enter the full name again but when I add in  
the % signs it tells me:  
@find = Product.find(:all, :conditions =\> [“title LIKE ‘%#{name}%’”])  
malformed format string - %R

Any suggestions on why the % doesn’t work?

---

<div class="post-metadata">

**Author:** ![laa018](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/c68b51/32.png) [@laa018](https://www.ruby-forum.com/u/laa018)\
**Post date:** [March 30, 2010, 9:25am UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987/4 "2010-03-30T09:25:16Z")

</div>

Why did you altered Jeffrey’s code.  
He gave you a good advice

In the “Agile Web D. with Rails” you can find this: Rails  
doesn’t parse the SQL inside a condition and so doesn’t substitute the  
#{name}

According to the same book, you should always use the [“title = ?”,  
name] notation as opposed to [“title = #{name}”]. It’s gives you a  
security belt. By doing this, Active Record will try to avoid some SQl  
injection attack.

Christophe

Le 30 mars 2010 à 05:44, Leah A. a écrit :

---

<div class="post-metadata">

**Author:** ![laa018](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/c68b51/32.png) [@laa018](https://www.ruby-forum.com/u/laa018)\
**Post date:** [March 30, 2010, 9:05am UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987/5 "2010-03-30T09:05:56Z")

</div>

Try this:

@product = Product.find(:first, :conditions =\> [“title like ?”,  
“%#{name}%”])

Hope this helps…

---

<div class="post-metadata">

**Author:** ![laa018](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/c68b51/32.png) [@laa018](https://www.ruby-forum.com/u/laa018)\
**Post date:** [March 30, 2010, 9:35am UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987/6 "2010-03-30T09:35:13Z")

</div>

Quoting Jeffrey L. Taylor [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > What I want to do now is if I enter in “Rolling” it will still find
> 
> @find = Product.find(:first, :conditions =\> [“title like ‘?’”, “%#{name}%”])
> 
> This code is untested, but I would expect to work.

The inner single quote are not needed, i.e.,

@find = Product.find(:first, :conditions =\> [‘title like ?’,  
“%#{name}%”])

HTH,  
Jeffrey

---

<div class="post-metadata">

**Author:** ![laa018](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/c68b51/32.png) [@laa018](https://www.ruby-forum.com/u/laa018)\
**Post date:** [March 30, 2010, 10:55pm UTC](https://www.ruby-forum.com/t/find-conditions-issue/185987/7 "2010-03-30T22:55:49Z")

</div>

Gianluca T. wrote:

> Try this:
> 
> @product = Product.find(:first, :conditions =\> [“title like ?”,  
> “%#{name}%”])
> 
> Hope this helps…

Hey thanks this totally worked!!! I really appreciate the help
