Checking booleans while maintaining database compatibility


#1

Users have many invitations and Invitations belongs_to a User. In the
user model:

has_many :open_invitations,
:class_name => ‘Invitation’,
:conditions => “completed_at IS NULL AND is_closed = ‘f’”

This works for SQLite3. But as a literal string this will fail if the
boolean values are different in another db system like MySQL, right?
How can I use a boolean in a condition that will work across all db
types?


#2

Taylor S. wrote:

has_many :open_invitations,
:class_name => ‘Invitation’,
:conditions => “completed_at IS NULL AND is_closed = ‘f’”

This works for SQLite3. But as a literal string this will fail if the
boolean values are different in another db system like MySQL, right?
How can I use a boolean in a condition that will work across all db
types?

I have done things like http://pastie.org/353140

Best Regards,

Danny


#3

On Mon, Jan 5, 2009 at 2:13 PM, Danny B. <
removed_email_address@domain.invalid> wrote:

types?

I have done things like http://pastie.org/353140

:conditions => [“completed_at IS NULL AND is_closed = ?”, false] works
across databases when finding records. Does it work in a has_many
declaration?

has_many :open_invitations, :class_name => …, :conditions =>
[“completed_at IS NULL AND is_closed = ?”, false]

Regards,
Craig


#4

Craig D. wrote:

On Mon, Jan 5, 2009 at 2:13 PM, Danny B. <
removed_email_address@domain.invalid> wrote:

types?

I have done things like http://pastie.org/353140

:conditions => [“completed_at IS NULL AND is_closed = ?”, false] works
across databases when finding records. Does it work in a has_many
declaration?

has_many :open_invitations, :class_name => …, :conditions =>
[“completed_at IS NULL AND is_closed = ?”, false]

Regards,
Craig

Thanks for the replies! Craig’s solution worked - you CAN use a “safe
array” in the conditions of has_many. The final associations look like
this and have been confirmed working in the console:

class User
has_many :invitations
has_many :open_invitations,
:class_name => ‘Invitation’,
:conditions => [“completed_at IS NULL AND is_closed = ?”,
false]
has_many :closed_invitations,
:class_name => ‘Invitation’,
:conditions => [‘completed_at IS NOT NULL OR is_closed = ?’,
true]


#5

Craig D. wrote:

:conditions => [“completed_at IS NULL AND is_closed = ?”, false] works
across databases when finding records. Does it work in a has_many
declaration?

Excellent, thanks- more code I can eliminate :slight_smile:

  • D