如何在named_scope中返回布尔结果?

时间:2010-01-15 03:29:02

标签: ruby-on-rails ruby boolean named-scope

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)" ]
  } 
}

我的结果是零。我希望它返回真实。我要做什么!?

另外,有更好的方法来写这个吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

THX。我发现了这些问题!我最后写了这个:

def不完整?(user_id,todo_id)     返回UserTodo.find_by_sql(“选择大小写时(#{user_id}不在(从user_todos中选择user_id))和     (#{todo_id}不在(从user_todos中选择todo_id))然后为true,否则false结束为user_todos中的不完整“)   端

但我更喜欢你的方法。