如果你真的需要從連接表字段添加到產生的對象,你可以添加select
:
User.joins("INNER JOIN stolen_passwords
ON users.social_security_number=stolen_passwords.ssn")
.select("*").find_each do |user|
logger.debug {
"A #{user.full_name} has a password hash #{user.password_hash}"
}
end
這裏假想user.full_name
是User
實例方法和user.password_hash
來自stolen_passwords
表。您也可以通過顯式地在select
的調用中列出查詢/返回字段來限制查詢/返回字段。
我們有時在rake任務中使用它來豐富數據庫或將其與第三方數據源進行比較:我們將使用提供的表格加入我們的表格,並使用兩列中的列生成「並排」CSV。普通SQL也可以正常工作,但通過活動記錄通常可以重用熟悉的範圍或以ruby執行計算的方法。
買者
不幸的是,從連接表來的字段將不會被轉換爲相應的寶石類型,他們都將是字符串(這是如果使用爲joins
SQL字符串特別是邏輯)。但是很容易的東西,如投的加入屬性:
module CastJoinedColumns
def cast_joined_columns joined_record
columns_hash.each do |column_name, column|
if joined_record.attributes.include?(column_name)
joined_record[column_name] = column.type_cast(joined_record[column_name])
end
end
end
end
這個模塊,就是要extended
到出現在加入和方法的右側的模型與加盟紀錄被調用。對於多個表中出現相同列名的情況,它可能會有些不當,應該改進,但是這是一個好的起點(對於使用保證不與我們自己衝突的列名的第三方數據源完全適用於我們)。
當我嘗試在控制檯中包含,它不顯示session_users表的屬性。 (是的,我知道它在幕後執行SQL - 只是想知道ActiveRecord的方式)。 – user273072545345
在控制檯中查詢什麼?我已更新我的代碼示例以顯示如何訪問'user'的'session_users'。 – Sam
好吧,最初它是我寫的原文。我在我的控制檯中嘗試了您的代碼示例,並且我仍然只獲取用戶的表格屬性。 – user273072545345