views:

23

answers:

1
{ :conditions =>  ["#{"(visibility = #{Shared::PUBLIC}) || " if include_non_employee_public} (visibility IN (#{employee_privacy}) AND user_id IN (#{users}))"] }

there is my condition for my named scope. now i've tried both || and OR in the named scope, but the console always shows AND.

any ideas?

+1  A: 
{ :conditions =>  ["#{"(visibility = #{Shared::PUBLIC}) || " if include_non_employee_public} (visibility IN (#{employee_privacy}) AND user_id IN (#{users}))"] }

It's confusing trying to reverse engineer what you're trying to do here. Generally though an sql query should always use "OR" rather than "||". || will only work in your ruby code. Also, normally you should use ? and then put the value afterwards rather than use string evaluation. That will work better with arrays for example which you seem to be using here. Eg

{ :conditions =>  ["#{"(visibility = ?) || " if include_non_employee_public} (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users]  }

Ok, next step is to work out what you are trying to do. Let's say for the sake of argument that include_non_employee_public is true. Then you will get

{ :conditions =>  ["(visibility = ?) || (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users]  }

Let's swap that || for an or so it will work in sql:

{ :conditions =>  ["(visibility = ?) or (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users]  }

Is that what you are trying to do? This now won't work though because in the case where include_non_employee_public is false, you now have a spare value (Shared::Public) in the second part of the argument list. I would, for the sake of comprehensibility, break this into an if statement:

if include_non_employee_public
  conditions = ["(visibility = ?) or (visibility IN (?) AND user_id IN (?))"], Shared::PUBLIC, employee_privacy, users] 
else
  conditions = ["visibility IN (?) AND user_id IN (?)"], employee_privacy, users] 
end

Now you can say :conditions => conditions in your query.

Max Williams
thats exactly what I was looking for. thank you.
DerNalia