Joh*_*hir 6 ruby activerecord ruby-on-rails associations
考虑
def Foo
has_one :user
end
Run Code Online (Sandbox Code Playgroud)
假设我只想要一个Foo人的User名字,而不是任何其他专栏.所以我想要
SELECT name FROM "users" WHERE "prices"."id" = 123
Run Code Online (Sandbox Code Playgroud)
但是做foo.user.name会给我
SELECT * FROM "users" WHERE "prices"."id" = 123
Run Code Online (Sandbox Code Playgroud)
是否有任何光滑的方式使用该关联只获得一列?如果没有,那么我必须这样做:
User.where(id: foo.user_id).pluck(:name).first
Run Code Online (Sandbox Code Playgroud)
一般来说,您可以使用 .select 方法指定要选择的列,例如:
User.select(:name).where(...)
Run Code Online (Sandbox Code Playgroud)
这将仅返回名称列中的值。您可以将其链接到关联上,但不能链接到实例上。因此,正如 meagar 通过否决其他答案(包括 Mori 删除的答案)非常积极地指出的那样,在关系中,has_one您不能将其链接到关联上(因为在这种情况下它不是关联)。但是,您可以构建自定义范围,如下所示:
class Foo < ActiveRecord::Base
has_one :bar
scope :bar_name, lambda {Bar.select(:name).where(:foo_id=> id)}
end
Run Code Online (Sandbox Code Playgroud)
上面的内容未经测试,因此您可能需要对其进行调整,但一般来说,该方法将允许您执行以下操作:
foo.bar_name
Run Code Online (Sandbox Code Playgroud)
...无需从 Bar 加载所有列。
| 归档时间: |
|
| 查看次数: |
2623 次 |
| 最近记录: |