我有一個模式中的一些「belongs_to的」協會,當我打電話Model.all(或其他自定義方法如果需要的話),我想不僅返回模型的所有列,但也返回每個關聯模型的一列。基本上,而不是僅僅返回相關模型的ID,我想得到一個更友好的屬性,如「名稱」。
使用Rails 3.2.x中
模型詳細信息:
我有五款車型,主要用於數據標準化。
class ActionItem < ActiveRecord::Base
belongs_to :action_item_status
belongs_to :prod_ops_acceptance
belongs_to :action_item_priority
belongs_to :incident_ticket
<truncated the rest>
end
class IncidentTicket < ActiveRecord::Base
attr_accessible :number
has_many :action_items
validates_presence_of :number
end
class ActionItemPriority < ActiveRecord::Base
attr_accessible :name
has_many :action_items
validates_presence_of :name
end
class ActionItemStatus < ActiveRecord::Base
attr_accessible :name
has_many :action_items
validates_presence_of :name
end
class ProdOpsAcceptance < ActiveRecord::Base
attr_accessible :name
has_many :action_items
validates_presence_of :name
end
嘗試的解決方案:
我試過的東西很多的組合,包括使用ActionItem.includes和ActionItem.joins無濟於事。我嘗試最新的是(只是想爲IncidentTicket模型的「數字」屬性以...開始)
ActionItem.all(
select: 'action_items.title, incident_tickets.number',
joins: 'INNER JOIN incident_tickets
ON action_items.incident_ticket_id = incident_tickets.id')
以上僅返回從ActionItem模型中的「標題」屬性,而不是'儘管SQL看起來正確,但仍可以從IncidentTicket模型獲取「number」屬性。無論我嘗試什麼,似乎連接表上的SELECT都被完全忽略。
很顯然,我在這裏認真地遺漏了一些東西或者完全錯誤。我覺得有一些ActiveRecord的魔術我錯過了,這使得這個微不足道。任何幫助將非常感激!請讓我知道如果你需要更多的細節,我覺得這是一種難以解釋......
謝謝爲答覆。試過,沒有運氣,仍然不會返回關聯表的列。 1.9.3-p484:004> ActionItem.joins(:incident_ticket).select('action_items.title,incident_tickets.number')最後 ActionItem加載(0.8ms)SELECT action_items.title,incident_tickets.number FROM'action_items 'INNER JOIN'incident_tickets' ON'incident_tickets'.'id' ='action_items'.'incident_ticket_id' ORDER BY'action_items'.'id' DESC LIMIT 1 =># –
irlrobot
2015-02-24 16:39:35
請更具體。 ActiveRecord執行什麼查詢?返回的集合是什麼樣的?集合中的對象有哪些屬性? – 2015-02-24 16:41:26
1.9.3-p484:004> ActionItem.joins(:incident_ticket).select('action_items.title,incident_tickets.number')最後 ActionItem加載(0.8ms)SELECT action_items.title,incident_tickets.number FROM'action_items' INNER JOIN'incident_tickets' ON'incident_tickets'.'id' ='action_items'.'incident_ticket_id' ORDER BY'action_items'.'id' DESC LIMIT 1 =># –
irlrobot
2015-02-24 16:43:18