Forum: Ruby on Rails How can pass the input value in the find_by_sql() function?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Tuhin (Guest)
on 2007-02-20 13:04
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' %>
<label for="id">ID</label>
    <%= 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
Thorsten (Guest)
on 2007-02-20 13:25
(Received via mailing list)
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:
<input type="text" id="movie_id" name="movie[id]" value="<%= @movie.id
%>" />
(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]])

3) 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
Ruhul A. (Guest)
on 2007-02-20 13:31
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:
> <input type="text" id="movie_id" name="movie[id]" value="<%= @movie.id
> %>" />
> (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]])
>
> 3) 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.
Thorsten (Guest)
on 2007-02-20 13:42
(Received via mailing list)
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>
Ruhul A. (Guest)
on 2007-02-20 13:44
thx, Thorsten. It works fine.

Amin
Ruhul A. (Guest)
on 2007-02-20 14:00
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
Phlip (Guest)
on 2007-02-20 17:30
(Received via mailing list)
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!!
This topic is locked and can not be replied to.