2016-02-12 53 views
0

我試圖從幾個表中執行連接來組合它們的列名。Rails在加入後從所有表中獲取列名

我想只是做了以下內容:

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

但這只是從用戶返回的列名,好像我剛剛做了以下內容:

User.column_names 

有誰知道如何從連接中獲取所有列名稱?看起來這不是經常需要的,因爲似乎沒有關於它的在線信息。我需要它來驗證用戶參數。

謝謝!

編輯:在用戶表

列名:在USER_ACCOUNT表

["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"] 

我希望能夠得到列名的完整列表,即

["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 

但這只是給我的第一組列名,即在短短的user表中的人(不是那些在用戶帳戶表)。

+0

您可以發佈,您有 – MZaragoza

+0

是什麼你把我們屬於用戶列中的錯誤? – MZaragoza

+0

是的,確切地說。 (如果有幫助,我會添加更多信息)。 – chris

回答

0

這是紅寶石的權利? 我並不那麼熟悉那種語言和它的語法,但是很明顯取決於MySQL的知識,我認爲你缺乏這些表如何相互連接! 你可以看到this post瞭解更多信息,我認爲這將有助於解決你的問題!

編輯: 華盛頓郵報說: 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)) 

我希望這有助於。

快樂黑客