Forum: Ruby on Rails case insensitive search

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.
bmgz (Guest)
on 2006-03-10 14:56
(Received via mailing list)
I am having trouble with a simple gallery search.
I type in a segment of the address and i only
seem to be getting results if I use the correct case.

This is in my Gallery controller:

def search
   @gallery = Gallery.find(:all, :include => :property,
              :conditions => "address LIKE '%#{@params[:keywords]}%'")
end

On a different note:
I am having trouble trying to access Gallery.property even though my
Model
associations have been setup. ie:
  Gallery belongs_to Property (foreign key -> property_id)
  Property has_many Galleries
Rick T. (Guest)
on 2006-03-12 23:13
(Received via mailing list)
On 3/10/06, bmgz <removed_email_address@domain.invalid> wrote:
> I am having trouble with a simple gallery search.
> I type in a segment of the address and i only
> seem to be getting results if I use the correct case.
>
> This is in my Gallery controller:
>
> def search
>    @gallery = Gallery.find(:all, :include => :property,
>               :conditions => "address LIKE '%#{@params[:keywords]}%'")
> end

Hi,

If you're using MySQL, that should be working fine.  Under postgres,
you'd need to use "ilike" rather than "like" for a case insensitive
search.

Not sure about other databases and what they use for case insensitive
searches.

Rick
Craig W. (Guest)
on 2006-03-12 23:38
(Received via mailing list)
On Sun, 2006-03-12 at 13:10 -0800, Rick T. wrote:
> > end
>
> Hi,
>
> If you're using MySQL, that should be working fine.  Under postgres,
> you'd need to use "ilike" rather than "like" for a case insensitive
> search.
>
> Not sure about other databases and what they use for case insensitive searches.
----
seems to me that you abstract it by using (params[:keywords]).downcase
and then you can do it ruby way instead of sql specific commands for one
db or another but I'm not too certain about the usage above...
#{@params[:keywords]} which just looks wrong and I would think that you
have to do '%' + YOUR_SEARCH_PHRASE + '%' anyway...so it seems that
there are a lot of things wrong with OP's question.

Craig
Brendon G. (Guest)
on 2006-03-13 09:27
(Received via mailing list)
Craig W. wrote:
...
> seems to me that you abstract it by using (params[:keywords]).downcase
> and then you can do it ruby way instead of sql specific commands for one
> db or another but I'm not too certain about the usage above...

The problem isn't with the params[:keywords] being case sensitive but
with
the database itself (Postgres). The previous poster sorted this out by
mentioning ILIKE. Nothing wring with choosing a database and actually
USING
it's specific functions I supoose..


> #{@params[:keywords]} which just looks wrong and I would think that you

Explain? it works perfectly well. "you can execute ruby code in a string
by using #{}" which is much neater than "doing" + this + "when" + you +
"have alot of " + stuff_going_on
Brendon G. (Guest)
on 2006-03-13 09:27
(Received via mailing list)
Rick T. wrote:
> If you're using MySQL, that should be working fine.  Under postgres,
> you'd need to use "ilike" rather than "like" for a case insensitive

Thanks, I didn't manage to stumble acrross ILIKE in the Postgres docs
:-(
Craig W. (Guest)
on 2006-03-13 09:52
(Received via mailing list)
On Mon, 2006-03-13 at 09:24 +0200, Brendon G. wrote:
> Craig W. wrote:
> ...
> > seems to me that you abstract it by using (params[:keywords]).downcase
> > and then you can do it ruby way instead of sql specific commands for one
> > db or another but I'm not too certain about the usage above...
>
> The problem isn't with the params[:keywords] being case sensitive but with
> the database itself (Postgres). The previous poster sorted this out by
> mentioning ILIKE. Nothing wring with choosing a database and actually USING
> it's specific functions I supoose..
----
not at all - I was just offering a db independent method as opposed to a
hard coded db specific method...I use postgres myself but that wasn't
the point.
----
>
>
> > #{@params[:keywords]} which just looks wrong and I would think that you
>
> Explain? it works perfectly well. "you can execute ruby code in a string
> by using #{}" which is much neater than "doing" + this + "when" + you +
> "have alot of " + stuff_going_on
----
well the + stuff seems more obvious to me but the thing that caught my
eye was using the instance variable @params which is confusing because
of the nature of params being the object passed by GET/POST. One of the
more confusing things to me was the usage of @model vs. @models and what
I finally figured out was that the difference was more in my own
expectations and thus the choice of the names of instance variables
becomes one of easy comprehension.

Craig
This topic is locked and can not be replied to.