嵌套的活动记录访问



>我正在尝试访问Rails项目中嵌套的ActiveRecord数据。
我想访问单个用户
的所有子网中的所有设备我想做这样的事情:

def index
    @user = User.find(params[:user_id])
    @subnets = @user.subnets.all
    @devices = @subnets.each.devices.order(sort_column+' '+sort_direction).search(params[:search])
    respond_to do |format|
      format.html
      format.csv { send_data Device.to_csv(@devices) }
    end
end

但是由于原因,@subnet.each.devices部分不起作用。

有没有办法我可以在不迭代和创建数组的情况下做到这一点,因为那样我就不能再使用 order 函数了。

尝试使用 joins

@devices = Device.joins(:subnets).where('subnets.user_id = :id', id: @user.id)

试试这个eager_load

 u = User.eager_load({subnets: :devices}).order('devices.updated_by desc').find(1)

这是志中的查询

SELECT "users"."id" AS t0_r0, "users"."username" AS t0_r1, "users"."created_at" AS t0_r2, "users"."updated_at" AS t0_r3, "users"."company_id" AS t0_r4, "users"."location_id" AS t0_r5, "subnets"."id" AS t1_r0, "subnets"."user_id" AS t1_r1, "devices"."id" AS t2_r0, "devices"."subnets_id" AS t2_r1, "devices"."updated_by" AS t2_r2, "devices"."created_by" AS t2_r3 FROM "users" LEFT OUTER JOIN "subnets" ON "subnets"."user_id" = "users"."id" LEFT OUTER JOIN "devices" ON "devices"."subnets_id" = "subnets"."id" WHERE "users"."id" = ? AND "users"."id" = 1 ORDER BY devices.updated_by desc

在此之后,您可以轻松获得设备:)

最新更新