Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 活动\u模型\u序列化程序,包括,以及序列化程序查询数据的原因?_Ruby On Rails_Ruby_Active Model Serializers_Json Api - Fatal编程技术网

Ruby on rails 活动\u模型\u序列化程序,包括,以及序列化程序查询数据的原因?

Ruby on rails 活动\u模型\u序列化程序,包括,以及序列化程序查询数据的原因?,ruby-on-rails,ruby,active-model-serializers,json-api,Ruby On Rails,Ruby,Active Model Serializers,Json Api,使用API时,我习惯于: 执行一些数据库查询 选择我在响应中需要的数据 序列化数据,并将其发送到客户端 现在,使用活动的_model _序列化程序,我假设 渲染json:artist,包括:“轨迹” 如果我的艺术家有一些曲目,include:“tracks”部分将对曲目进行序列化 但显然,它也会为我从db中提取曲目 这是正常的行为吗?序列化程序应该进行数据库查询吗?是的,要包含关联,必须首先从数据库中获取它。否则,如何将其包含在响应中 看 关联由其相应的方法调用。在您的示例中,这将是Artist

使用API时,我习惯于:

执行一些数据库查询 选择我在响应中需要的数据 序列化数据,并将其发送到客户端 现在,使用活动的_model _序列化程序,我假设

渲染json:artist,包括:“轨迹”

如果我的艺术家有一些曲目,include:“tracks”部分将对曲目进行序列化

但显然,它也会为我从db中提取曲目


这是正常的行为吗?序列化程序应该进行数据库查询吗?

是的,要包含关联,必须首先从数据库中获取它。否则,如何将其包含在响应中

关联由其相应的方法调用。在您的示例中,这将是Artisttracks。看。这意味着,如果在调用序列化程序之前加载关联,它将不会调用数据库

例如:

artist = Artist.first # <= artists table gets queried
artist.tracks.load # <= tracks table gets queried
render json: artist, include: :tracks # <= no queries

好的,那么在rails中:serialalize=serialize+从db查询缺少的数据,对吗?是的。唯一的选择是:1。引发由于缺少数据而无法呈现的错误。2.在相关对象上设置一个错误,并像ActiveRecord::Base一样返回false作为结果。但我的答案中的实现是Rails开发人员的目标。