【发布时间】:2014-06-16 09:17:32
【问题描述】:
在我的 Rails 4 应用程序中,我有以下模型:
class Person < ActiveRecord::Base
has_many :addresses
end
class Address < ActiveRecord::Base
belongs_to :person
belongs_to :city
end
class City < ActiveRecord::Base
has_many :addresses
end
我正在使用:includes 函数将查询结果返回到一个变量中:
Address.includes(:person, :city).where("person_id = 1")
它按预期工作,只是我不希望查询返回每一列。
这是我尝试过的:
- 使用
select并明确指定表名和列名,例如“city.name”,但 Rails 会生成一个带有外连接的大查询,这可能会非常昂贵,尤其是当有大量并发请求时,因此更喜欢更好的解决方案。 - 不想硬编码完整和原始的 SQL 语句,因为以后会出现维护问题
- 创建一个新的“虚拟”
belongs_to关系,如地址:belongs_to :city_select_columns, -> { select('name') }, :class => 'City',但这不起作用(实际上我不确定是否支持select,只遇到有关 @987654329 的文档@ 到目前为止)。 - 可以在 City 和 Person 中定义
scope吗?但我不确定它应该如何定义,或者这样做是否有意义
建议?谢谢
【问题讨论】:
-
您说“它按预期工作,只是我不希望查询返回每一列。”但是您想要哪些列?
标签: sql ruby-on-rails ruby-on-rails-4 scope rails-activerecord