2016-02-12 4 views
0

Я пытаюсь получить имена столбцов из нескольких таблиц, выполнив объединение для их объединения.Rails получает имена столбцов из всех таблиц после присоединения

Я пытался просто делать следующее:

User.joins(:user_account, :user_file, :user_education).column_names 

, но это возвращает только имена столбцов из пользователя, как если бы я только что сделал следующее:

User.column_names 

Кто-нибудь знает, как получить все имена столбцов из соединения? Похоже, что это не часто требуется, потому что, похоже, в Интернете нет много информации об этом. Мне нужно это для проверки параметров пользователя.

Спасибо!

EDIT:

имена столбцов в таблице User:

["id", "status", "accepted_terms", "created_at", "updated_at", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email", "provider", "uid"] 

имена столбцов в USER_ACCOUNT таблице:

["first_name", "last_name", "phone_number", "address"] 

Я хочу, чтобы иметь возможность получить весь список имен столбцов, т.е.

["id", "status", "accepted_terms", "created_at", "updated_at", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email", "provider", "uid", "first_name", "last_name", "phone_number", "address"] 

Какой метод нужен для получения именно этого списка? Я попытался

User.joins(:user_account).column_names 

, но это только дает мне первый набор имен столбцов, то есть те, в только таблице пользователей (не те, в таблице учетной записи пользователя).

+0

Вы можете разместить сообщение об ошибке, что вы испытываете – MZaragoza

+0

является то, что вы получаете нам колонки, которые принадлежат к пользователю? – MZaragoza

+0

есть, точно. (Я добавил дополнительную информацию, если это поможет). – chris

ответ

0

Это рубин справа? Я не знаком с этим языком и его синтаксисом, но в зависимости от знания MySQL я думаю, что вам не хватает того, как эти таблицы соединяются друг с другом! Вы можете увидеть this post для получения дополнительной информации, которая, я думаю, поможет решить вашу проблему!

EDIT: сообщение говорит: Rails позволяет писать пользовательские присоединиться к условиям внутри строки, например:

Reservation.joins('INNER JOIN "tables" ON "tables"."id" = "reservations"."table_id" INNER JOIN "users" ON "users"."id" = "reservations"."user_id"') 

или намного чище просто указать несколько присоединиться пункты:

Reservation.join(:user).join(:table) 

Для извлеките данные, вам нужно просто применить несколько пользовательских предложений, например:

Reservation.join(:user).join(:table).select("tables.seats AS table_seats") 
+0

@Sarriman, спасибо за обновление сообщения! – Andrew

1

Вы можете просто сделать это:

User.column_names + UserAccount.column_names 

и так далее. Rails извлекает имена столбцов из класса ActiveRecord, а не из отношения SQL.

UPD. Или более идиоматично

[User, UserAccount, UserFile, UserEducation].flat_map(&:column_names).uniq 
0

Вы можете сделать что-то подобное.

User.select("users.*, user_accounts.*, user_files.*, user_educations.*").joins(:joins(:user_account, :user_file, :user_education)) 

Я надеюсь, что это поможет.

Удачного хак