self.where('section = ?', '%:search_item%')

I am trying to do a search where I can enter a part of a word and the
search find all occurrences of that part word in the field. The above
subject does not work. Can anyone help
I am using Rails 3 and ruby 1.9.2
I use to be able to do it in rails 2.x.
In my Model I have the following:-
  def self.search(search_item)
    if search_item
     self.where('section = ?', '%:search_item%')
    else
      self.all
    end
  end

In my controller I have:-
    @homepages = Homepage.search(params[:search])
    respond_to do |format|
      format.html # index.html.erb
      format.xml { render :xml => @homepages }
      format.js {render :js => @homepages}
    end

self.where(‘section = %?%’, search_item)

Thanks for that, but I am still getting a syntax error. Now:-
SQLite3::SQLException: near "%": syntax error: SELECT
"homepages".* FROM "homepages" WHERE (section = %'Gar'%)

This shows that the correct text is being passed, but the syntax is
still incorrect.
Don

Thanks for that, but I am still getting a syntax error. Now:-
SQLite3::SQLException: near "%": syntax error: SELECT
"homepages".* FROM "homepages" WHERE (section = %'Gar'%)

This shows that the correct text is being passed, but the syntax is
still incorrect.
Don

You can't put the question mark inside the percentage signs, as Rails
SQL-escapes the variable and wraps it in appropriate delimiters...
hence your error. You need to wrap your string in percentages one way
or another and pass that in:

self.where('section = ?', "%#{search_item}%")

Thanks Michael
I have tried that along with other versions of '%search_item%'without
any joy. Just tried it again. it does not throws an error, but it
returns nothing.
     self.where('section = ?', search_item) works with the full word
'Gardening', but not 'Gar'
     self.where('section = ?', '%search_item%') does not work and you
cannot use %without a ' or "
     self.where('section = ?', '%'search_item'%') is an internal
server error
     self.where('section = ?', '%'+search_item+'%') no go either.
Don

Oops.... just spotted....
if you're trying to do a SQL query with "%" you need to use "LIKE"
instead of "="

   self.where('section LIKE ?', "%#{search_item}%")

Wow Thanks Michael
After all this time.
Both of these works which do you think is best.
     self.where('section LIKE ?', "%#{search_item}%")
     self.where('section LIKE ?', '%'+search_item+'%')
I can now get back to the remote => ajax call.
Pure joy Thanks again Don

personally, I prefer the syntax of the first method; it seems more "Ruby".

Michael Pavling wrote in post #958364: