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

我在这里假设 nameis_activeService 模型的属性。