Rails 活动记录查询问题
Rails Active Record Query Issue
有两个模型,客房和服务。
Rooms -> has_many :services, dependent: :destroy
Services -> belongs_to :rooms
在控制器中,我需要自定义JSON。所以我这里没有使用序列化器。
@room_services = @room.services
根据我的JSON 根据条件我需要获得服务价值
// 我每一个之前都有很多条件,所以我没有添加序列化器。
@room_services.each do |value|
data.push({ name: value.name, is_active: value.is_active })
end
虽然运行这个,我能看到n次查询。但是我已经将activerecord值存储在@room_services.
谁能帮我理解一下这个过程。
欢迎来到 SO!好吧,我看到了几个问题。
首先,您的型号名称应该是单数的,例如Room
不是 Rooms
。而在service.rb中,应该是belongs_to :room
.
现在回答你的问题,ActiveRecord 执行“lazy_loading”,这意味着它格式化查询,但直到需要结果时才会执行。
您似乎在尝试填充 data
数组。
试试这个:
@room.services.collect{|s| {name: s.name, is_active: s.is_active}}
但是,如果您试图形成一个 JSON 字符串,Rails 可以提供帮助:
@room.services.to_json
# in service.rb
class Service < ActiveRecord::Base
def as_json(options={})
super(only: [:name, :is_active])
end
end
我在这里假设 name
和 is_active
是 Service
模型的属性。
有两个模型,客房和服务。
Rooms -> has_many :services, dependent: :destroy
Services -> belongs_to :rooms
在控制器中,我需要自定义JSON。所以我这里没有使用序列化器。
@room_services = @room.services
根据我的JSON 根据条件我需要获得服务价值
// 我每一个之前都有很多条件,所以我没有添加序列化器。
@room_services.each do |value|
data.push({ name: value.name, is_active: value.is_active })
end
虽然运行这个,我能看到n次查询。但是我已经将activerecord值存储在@room_services.
谁能帮我理解一下这个过程。
欢迎来到 SO!好吧,我看到了几个问题。
首先,您的型号名称应该是单数的,例如Room
不是 Rooms
。而在service.rb中,应该是belongs_to :room
.
现在回答你的问题,ActiveRecord 执行“lazy_loading”,这意味着它格式化查询,但直到需要结果时才会执行。
您似乎在尝试填充 data
数组。
试试这个:
@room.services.collect{|s| {name: s.name, is_active: s.is_active}}
但是,如果您试图形成一个 JSON 字符串,Rails 可以提供帮助:
@room.services.to_json
# in service.rb
class Service < ActiveRecord::Base
def as_json(options={})
super(only: [:name, :is_active])
end
end
我在这里假设 name
和 is_active
是 Service
模型的属性。