Как вернуть логический результат в named_scope? - PullRequest
0 голосов
/ 15 января 2010
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 ]

5 голосов
/ 15 января 2010

Существует огромная проблема с вашим кодом: именованные области не предназначены для возврата логических значений или отдельных значений, а для возврата фильтров, которые должны быть связаны.

Вместо этого используйте метод класса. Кроме того, используйте интерполяцию, не записывайте значения непосредственно в код 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 голосов
/ 16 января 2010

Thx. Я обнаружил проблемы! Я закончил тем, что написал это:

определение не завершено? (User_id, todo_id) вернуть UserTodo.find_by_sql («выберите случай, когда (# {user_id} нет в (выберите user_id из user_todos)) и (# {todo_id} не в (выберите todo_id из user_todos)) затем true, иначе false end как неполное из user_todos ") конец

Но мне больше нравится твой подход.

...