2013-06-26 4 views
0

У меня есть страница, которая использует несколько фильтров, и все работает нормально, за исключением одного фильтра. Фильтр, который не работает, должен проверить, какие foos не имеют bars. То есть нет bar запись будет иметь foo_id, соответствующий foos Я хочу отобразить.Как использовать объединения в области?

Для этого примера, давайте сделаем фильтр на room и foos с no_bars

У меня есть что-то вроде этого в областях (foo.rb):

scope :not_validated, where("mark_validated = false") 
    scope :not_located, where("grid_location_id IS NULL") 
    scope :no_bars, joins("LEFT JOIN bars ON foos.id = bars.foo_id where").where("bars.id IS NULL") 

    scope :room_1, where("room_id = 1") 
    scope :room_2, where("room_id = 2") 

У меня есть фильтр parial:

<%= dropdown_tag filter_button_name("Room", "room") do %> 
    <li><%= multi_filter_link "room", "room_1"%></li> 
    <li><%= multi_filter_link "room", "room_2" %></li> 
<% end %> 

<%= dropdown_tag filter_button_name("Filter By", "filter") do %> 
    <li><%= multi_filter_link "filter", "not_validated" %></li> 
    <li><%= multi_filter_link "filter", "not_located" %></li> 
    <li><%= multi_filter_link "filter", "no_bars" %></li> 
<% end %> 

Когда я пытаюсь просмотреть foos с помощью no_bars фильтра, я получаю следующее сообщение об ошибке:

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE (bars.id IS NULL)' at line 1: SELECT `foos.*` FROM `foos` LEFT JOIN bars ON foos.id = bars.foo_id where WHERE (bars.id IS NULL) 

ответ

1
scope :no_bars, joins("LEFT JOIN bars ON foos.id = bars.foo_id where").where("bars.id IS NULL") 

Я думаю, что вы хотите:

scope :no_bars, joins("LEFT JOIN bars ON foos.id = bars.foo_id").where("bars.id IS NULL") 
+0

Hot Dang, я скучаю Как бы это. Спасибо @ user16484. –