我有一个模式中的一些“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