2017-02-17 13 views
0

У меня есть столбец в таблице Tooltype с именем «deleted», который может быть истинным или ложным. Я хочу, чтобы записи были ложными. Мне как-то удается проверить только вторую таблицу (инструментальные модули), но не для первой (тип инструмента). Так что это будет работать, если у меня был столбец «удален» в моей toolunits таблице:Ruby Active Record join with condition

obj = Tooltype.joins(:toolunits).where(toolunits: {deleted: false}).distinct 

Но это не (см третью строчку):

get '/api/tooltypes' do 
    if params['selector'] 
    obj = Tooltype.joins(:toolunits).where(tooltype: {deleted: false}).distinct 
    else 
    obj = Tooltype.joins(:toolunits).distinct 
    end 
    obj.get_list() do |q| 
    if params['selector'] 
     q.where(deleted: false) 
    end 
    end.serialize.first 
end 

Как я могу использовать условие на первом Таблица?

+0

'Tooltype.joins (: toolunits) .гд (удалена ложь) .distinct' –

+0

Это Неоднозначный – Ursus

+0

Я думаю, вы получите сообщение об ошибке для этого – Ursus

ответ

0

Я думаю о двух способах

Tooltype.joins(:toolunits).where(Tooltype.table_name => {deleted: false}) 

Tooltype.joins(:toolunits).where('tooltypes.deleted = ?', false) 
+0

Я только что проверил его, чтобы подтвердить. AR использует имя таблицы внутри метода 'where' при использовании хэша. –

+0

Да, но имя какой таблицы? В этом запросе есть соединение. Итак, имена двух таблиц. – Ursus

+0

Он использует имя таблицы вызывающего класса. Конечно, я пробовал в запросе с соединением и с потенциально конфликтующим именем. Я не буду публиковать его здесь иначе –

 Смежные вопросы

  • Нет связанных вопросов^_^