2010-01-15 15 views
0
named_scope :incomplete?, lambda { |user_id, todo_id| 
    { :select => 1, :conditions => 
    [ "#{user_id} not in (select user_todos.user_id from user_todos) and 
     #{todo_id} not in (select user_todos.todo_id from user_todos)" ] 
    } 
} 

我得到一个零结果。我希望它回归真实。我该做什么!?如何在named_scope中返回布尔结果?

另外,有没有更好的方式来写这个?

+2

请问格式化代码?只需点击按钮编辑您的问题,突出显示代码,然后点击“101/010”。 – 2010-01-15 04:42:57

回答

5

您的代码存在一个巨大的问题:命名范围无意返回布尔值或单值,旨在返回链接的过滤器。

改为使用类方法。另外,使用插值,不要将值直接写入SQL代码。

class YourModel 
    def self.incomplete?(user_id, todo_id) 
    exists?(["? not in (select user_todos.user_id from user_todos) and ? not in (select user_todos.todo_id from user_todos)", user_id, todo_id]) 
    end 
end 
+0

而不是使用'!!'技巧,它会更清晰地使用:'存在? [“?不在(...)和?不在(...)”,user_id,todo_id]' – 2010-01-15 22:05:09

+0

我同意。更新了答案。 – 2010-01-16 11:59:16

0

Thx。我发现了这些问题!我结束了写这个:

高清不完整的(USER_ID,todo_id) 回报UserTodo.find_by_sql(“选择情况下(#{}的user_id没有(从user_todos选择USER_ID))和 (#{} todo_id不? (从user_todos选择todo_id))then true else false end from user_todos“) end

但我更喜欢你的方法。