Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4-限制从关联模型检索的列_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails 4-限制从关联模型检索的列

Ruby on rails Rails 4-限制从关联模型检索的列,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我是Rails新手,在编写活动记录查询时,我注意到正在检索all关联表的all列。我想告诉Active Record应该从哪些表中检索哪些字段。你打算怎么做 我的模型及其关联如下: class用户

我是Rails新手,在编写活动记录查询时,我注意到正在检索all关联表的all列。我想告诉Active Record应该从哪些表中检索哪些字段。你打算怎么做

我的模型及其关联如下:

class用户
我遵循Rails,当我尝试使用
选择(“users.id,profiles.first\u name,profiles.last\u name,comments.comment”)
来指定字段列表时,我会在Rails控制台上收到一条弃用警告(运行的SQL查询是所有相关表的
左外部联接
,但它仍然包括所有列):

弃用警告:您似乎急于加载字符串SQL代码段中引用的表(其中一个:用户、帖子)。例如:
Post.includes(:comments).where(“comments.title='foo'”)
当前,Active Record可以识别字符串中的表,并且知道如何将注释表连接到查询,而不是在单独的查询中加载注释。但是,在不编写完整的SQL解析器的情况下执行此操作本身就存在缺陷。因为我们不想编写SQL解析器,所以我们正在删除此功能。从现在开始,您必须从字符串引用表时,合法地告诉活动记录:
Post.includes(:comments).where('comments.title='foo')。引用(:comments)
如果不依赖隐式连接引用,则可以通过设置“config.active\u record.disable\u implicit\u join\u references=true”来完全禁用该功能。(从(irb)处的irb\U绑定调用):34)

检查以下工作是否适合您

Class User < ActivcRecord::Base
   default_scope select("column1, column2, column3")

end
Class用户
在Rails for Active Record查询界面的深处,我找到了答案。诀窍是使用特定关联类型的作用域,在其中限制检索到的字段

直接引自指南:

4.1.3所属项目的范围 有时您可能希望自定义所属对象使用的查询。此类自定义可通过作用域块实现。例如:

类顺序{where active:true},
依赖::销毁
结束
您可以在范围块内使用任何标准查询方法


因此,在上面的范围中添加一个
select
方法,并包含要检索的字段列表,就可以了。

我已经查看了
default\u范围
,但问题是它将所有查询的指定列限制在模型中。如果我希望不同的查询使用不同的列集,该怎么办<代码>范围
工作?您可以通过以下方式完成Post。选择(:field1,:field2)。查找(id)感谢您的回复。是的,这对Post模型有效,并且我没有收到任何弃用警告。现在,我如何限制关联模型上的字段?例如,我想做一些类似于
用户的事情。选择(:field1,:field2)。包括(:posts)
,如何限制从
Post
模型检索到的字段?您关于
默认范围的回答让我在边缘指南中四处寻找,我发现答案深深地埋藏在指南中。感谢您为我指明了正确的方向!