How can pass the input value in the find_by_sql() function?


#1

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


#2
  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


#3
  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


#4

thx, Thorsten. It works fine.

Amin


#5

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


#6

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.


#7

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 <-- NOT a blog!!