2015-09-23 3 views
1

Я хочу найти запрос в два стола (users.name, users.email, object.name) Когда я типа:Запрос в двух таблице

def self.search(query) 
    query = "%#{query}%" 
    where("(name like ? or email like ? or surname like ?)", query, query, query) 
    end 

Это работает отлично, но сейчас я хочу добавить следующее поле для поиска из другой таблицы

def self.search(query) 
     query = "%#{query}%" 
     joins(:object).where("(objects.name like ? or name like ? or email like ? or surname like ?)", query, query, query, query) 
     end 

Ошибка:

`User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 120 ORDER BY `users`.`id` ASC LIMIT 1 
    (1.2ms) SELECT COUNT(*) FROM `users` INNER JOIN `objects` ON `objects`.`id` = `users`.`object_id` WHERE ((objects.name like '%ver%' or email like '%ver%' or name like '%ver%' or surname like '%ver%')) 
Mysql2::Error: Column 'name' in where clause is ambiguous: SELECT COUNT(*) FROM `users` INNER JOIN `objects` ON `objects`.`id` = `users`.`object_id` WHERE ((objects.name like '%ver%' or email like '%ver%' or name like '%ver%' or surname like '%ver%')) 
Completed 500 Internal Server Error in 6ms 
` 

Моя модель

User belongs_to :object 
Object has_many :users 

Как можно добавить другую таблицу?

ответ

2

Вы также должны указать вторые имена таблицы:

def self.search(query) 
    query = "%#{query}%" 
    joins(:object).where("(objects.name like ? or users.name like ? or email like ? or surname like ?)", query, query, query, query) 
end 
+0

Вы делаете мой день :)! – Kam

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