2010-08-09 21 views

回答

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

这很混乱,试图逆向工程在这里尝试做什么。通常,尽管一个sql查询应该总是使用“OR”而不是“||”。 ||将只能在你的ruby代码中工作。另外,通常你应该使用?然后将值放在后面而不是使用字符串评估。这对于你看起来在这里使用的数组来说会更好。例如

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

好的,下一步就是要弄清楚你正在尝试做什么。我们假设include_non_employee_public为true。然后你会得到

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

让我们交换||为一个左右,它将工作在SQL:

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

这是你正在尝试做什么?这现在不会工作,因为在include_non_employee_public为false的情况下,您现在在参数列表的第二部分中有一个空闲值(Shared :: Public)。为了便于理解,我会将其分成if语句:

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 

现在您可以在查询中说:conditions =>条件。

+0

这就是我正在寻找的。谢谢。 – NullVoxPopuli 2010-08-09 16:30:06