SQL OR in Rails

Hi there everyone,

How does one set-up a SQL OR query in Rails.

I have the following SQL query:

select state, state_abbr, country from states where country = ‘Country’
or country = ‘International’ order by state asc;

Now in Rails:

@states = States.find(:all, :conditions => [:country => LOCALE, :country
=> ‘International’])

But the above will do a SQL AND query. What is the right keyword to use
between those two conditions to turn this into a OR query?

Thanks!
Schalk

Hi Schalk

Just use:

@states = States.find(:all, :conditions => [“country=? OR
country=‘International’”, LOCALE])

Jan

Cool, thanks. My IDE was moaning when I did something similar to that.
One should not always trust the IDE I guess, or does it have something
to do with the fact that you moved the constant to the end?

Kind Regards,
Schalk

Thanks Jan.

Hi,

I’m not sure how your code was, but you can do this as well:

@states = States.find(:all, :conditions => [“country=? OR country=?”,
LOCALE, ‘International’])

It’s just an array where every question mark will get replaced with
it’s successive array element after having being Escaped by Rails.
So the first <?> gets replaced with the 2nd element
The second <?> with the 3rd element
And so on

Jan

On Oct 21, 2008, at 7:43 AM, javinto wrote:

The second <?> with the 3rd element
And so on

Jan

You have a special case there – one column with any of a set of
values. For that, you can use the SQL ‘IN’ operation like this:

States.find(:all, :conditions => [‘country IN (?)’, [LOCALE,
‘International’]] )

If you had more,
countries = [ …all the ones you needed… ]

States.find(:all, :conditions => [‘country IN (?)’, countries] )

It will work with an array having just one element also.

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

I believe you can also do:

@states = States.find_by_country([LOCALE, ‘International’])

Worth a try…

Cheers,

-Roy