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

結果はゼロです。真に戻してほしい。やらなきゃ!?

また、これを書くためのより良い方法はありますか?

4

2 に答える 2

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
于 2010-01-15T09:07:27.627 に答える
0

どうも。問題を発見しました!私はこれを書くことになった:

def incomplete?(user_id、todo_id)return UserTodo.find_by_sql( "select case when(#{user_id} not in(select user_id from user_todos))and(#{todo_id} not in(select todo_id from user_todos))then true else false user_todosから不完全として終了します")end

しかし、私はあなたのアプローチの方が好きです。

于 2010-01-16T20:36:23.380 に答える