# How can pass the input value in the find\_by\_sql() function?

**URL:** <https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172>\
**Category:** Rails\
**Created:** [February 20, 2007, 12:04pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172 "2007-02-20T12:04:09Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![tuhin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/a87d85/32.png) [@tuhin](https://www.ruby-forum.com/u/tuhin)\
**Post date:** [February 20, 2007, 12:04pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172/1 "2007-02-20T12:04:09Z")

</div>

I am newbie in Ruby. please help me immediately. I have a input field in  
my index page for search a movie by entering the ID of the movie.

the html part of search…

\<%= start\_form\_tag :action =\> ‘search’ %\>  
ID  
\<%= text\_field “movie”, “id” %\>  
\<%= submit\_tag “Search” %\>  
\<%= end\_form\_tag %\>

in controller

def search  
query = "select \*  
from movies  
where id = ?  
"  
@report = Movie.find\_by\_sql([query, params[:id]])

end

But it return nothings.

NUll value in params[:id]

How can pass the input value in the find\_by\_sql() function?  
Please please help me immediately.

Thanks in advanced.

Amin

---

<div class="post-metadata">

**Author:** ![tuhin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/a87d85/32.png) [@tuhin](https://www.ruby-forum.com/u/tuhin)\
**Post date:** [February 20, 2007, 12:25pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172/2 "2007-02-20T12:25:18Z")

</div>

1. “please help me immediately” is rude. You think people say “oh i  
know the answer but i will wait with the answer for 3 days?” People  
will help if they can.

2. \<%= text\_field “movie”, “id” %\>  
will compile to:  
  
(look at your generated HTML)  
so your parameter is params[:movie][:id] and NOT params[:id]

=\> @report = Movie.find\_by\_sql([query, params[:movie][:id]])

1. why don’t you just use:

@report = Movie.find(params[:movie][:id])

that will have the same result, plus it gives you the advantages of AR  
collections, which find\_by\_sql doesn’t

---

<div class="post-metadata">

**Author:** ![tuhin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/a87d85/32.png) [@tuhin](https://www.ruby-forum.com/u/tuhin)\
**Post date:** [February 20, 2007, 12:42pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172/3 "2007-02-20T12:42:19Z")

</div>

1. as i already said, it is not params[:id], it’s params[:movie][:id]  
so, as i already said, try Movie.find(params[:movie][:id])

2. you don’t need the @movie.id value. if it’s not there, it won’t be  
filled in the text\_field, but that’s fine. it’s just part of how the  
FormTagHelpers build the Tags.  
look at your generated HTML

On 20 Feb., 12:31, Ruhul A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![tuhin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/a87d85/32.png) [@tuhin](https://www.ruby-forum.com/u/tuhin)\
**Post date:** [February 20, 2007, 12:44pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172/4 "2007-02-20T12:44:15Z")

</div>

thx, Thorsten. It works fine.

Amin

---

<div class="post-metadata">

**Author:** ![tuhin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/a87d85/32.png) [@tuhin](https://www.ruby-forum.com/u/tuhin)\
**Post date:** [February 20, 2007, 1:00pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172/5 "2007-02-20T13:00:35Z")

</div>

Sorry for that.

My main missionis to search a movie by its name. so please tell me  
how can i use to write the sql query using “like”

suppose i want to search all movie whose name begin with “mission”

select \*from movies where name like ‘mission%’

so what will be the following two lines?

query = "select \* from movies where name like ?  
"  
@report = Movie.find\_by\_sql([query, params[:movie][:id]])

Thanks in advanced

Amin

---

<div class="post-metadata">

**Author:** ![tuhin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/a87d85/32.png) [@tuhin](https://www.ruby-forum.com/u/tuhin)\
**Post date:** [February 20, 2007, 12:31pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172/6 "2007-02-20T12:31:30Z")

</div>

Thorsten wrote:

> 1. “please help me immediately” is rude. You think people say “oh i  
> know the answer but i will wait with the answer for 3 days?” People  
> will help if they can.
> 
> 2. \<%= text\_field “movie”, “id” %\>  
> will compile to:  
>   
> (look at your generated HTML)  
> so your parameter is params[:movie][:id] and NOT params[:id]
> 
> =\> @report = Movie.find\_by\_sql([query, params[:movie][:id]])
> 
> 1. why don’t you just use:
> 
> @report = Movie.find(params[:movie][:id])
> 
> that will have the same result, plus it gives you the advantages of AR  
> collections, which find\_by\_sql doesn’t

Dear Thorsten,  
Thx for ur help. But I do not have @movie.id value.  
I just take a input for the movie id and search the id in the “movies”  
table  
so i can not use it.  
I also try to use Movie.find(params[:id]) but error return as id is  
null.  
please try to understand my question.

---

<div class="post-metadata">

**Author:** ![tuhin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/a87d85/32.png) [@tuhin](https://www.ruby-forum.com/u/tuhin)\
**Post date:** [February 20, 2007, 4:30pm UTC](https://www.ruby-forum.com/t/how-can-pass-the-input-value-in-the-find-by-sql-function/86172/7 "2007-02-20T16:30:16Z")

</div>

Ruhul A. wrote:

> My main missionis to search a movie by its name. so please tell me  
> how can i use to write the sql query using “like”

The books /Agile Development with Rails/ and /Rails Recipes/ cover  
that. Please consider getting one, or both. They will teach this  
trick:

```
raise params.inspect

```

Write that into an action, and it will show you what parameters the  
view sends to the action. Then take it out!

> suppose i want to search all movie whose name begin with “mission”

```
    @reports = Movie.find(:all, :conditions => ['name like ?', 

```

“%mission%”])

Now replace mission with a variable, such as “%#{search\_term}%”.

–  
Phlip  
[http://c2.com/cgi/wiki?ZeekLand](http://c2.com/cgi/wiki?ZeekLand) ← NOT a blog!!
