2010-01-15 3 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"을 클릭하십시오. –

답변

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

'!! '트릭을 쓰는 대신'exists? [ "(~) 안 ~ (...)", user_id, todo_id] –

+0

동의합니다. 답변을 업데이트했습니다. –

0

Thx. 문제를 발견했습니다! 나는이 글을 쓰는 결국 :

데프 불완전 (USER_ID, todo_id) 반환 UserTodo.find_by_sql ("선택의 경우 사용하지 않을 때는 user_todos에서 user_id를 선택 (에 (# {USER_ID})) 및 (# {todo_id}하지? (user_todos에서 todo_id를 선택하십시오.) then true false else from user_todos ") end

하지만 나는 당신의 접근 방식을 더 좋아합니다.