Rails应用程序发送过多的不相关的数据以JSON

问题描述 投票:0回答:2

所需的输出:仅从活动,如数据:

[{"id":600,"title":600,"start":"2018-10-17T15:24:06.000Z","end":"2018-10-17T17:11:06.000Z","color":"green"}
[{"id":601,"title":601,"start":"2019-10-17T15:24:06.000Z","end":"2018-10-17T17:11:06.000Z","color":"green"}

出于某种原因电流输出也给信息从application.html.erbapplication.js和其他文件:enter image description here

事件/ _event.json.jbuilder:

json.id event.id
json.title event.id
json.start event.starts_at
json.end event.ends_at
json.color event.status_color unless event.status_color.blank?
json.url event_url(event, format: :json)

index.json.jbuilder:

json.array! @events, partial: 'events/event', as: :event

控制器:

class EventsController < ApplicationController
  def index
    @events = Event.all
    #@q = Event.ransack(params[:q])
    #@events = @q.result.includes(:location, :client, :jobs).paginate(:page => params[:page], :per_page => 15).order("created_at DESC")
  end end

安慰:

Started GET "/events.json" for 143.27.126.62 at 2019-01-31 10:49:24 +0000
Cannot render console from 143.27.126.62! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by EventsController#index as JSON
  User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE (users.tenant_id IS NULL) AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /usr/local/rvm/gems/ruby-2.5.3/bundler/gems/milia-4c36b46f3f42/lib/milia/control.rb:102
  Tenant Load (0.7ms)  SELECT "tenants".* FROM "tenants" INNER JOIN "tenants_users" ON "tenants"."id" = "tenants_users"."tenant_id" WHERE (tenants.tenant_id IS NULL) AND "tenants_users"."user_id" = $1  [["user_id", 1]]
  ↳ /usr/local/rvm/gems/ruby-2.5.3/bundler/gems/milia-4c36b46f3f42/lib/milia/control.rb:69
MILIA >>>>> [change tenant] new: 1      old: 1
MILIA >>>>> [auth_tenant callback]
  Tenant Load (0.6ms)  SELECT  "tenants".* FROM "tenants" WHERE (tenants.tenant_id IS NULL) AND "tenants"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /usr/local/rvm/gems/ruby-2.5.3/bundler/gems/milia-4c36b46f3f42/lib/milia/base.rb:126
  CACHE Tenant Load (0.0ms)  SELECT  "tenants".* FROM "tenants" WHERE (tenants.tenant_id IS NULL) AND "tenants"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /usr/local/rvm/gems/ruby-2.5.3/bundler/gems/milia-4c36b46f3f42/lib/milia/base.rb:126
  CACHE Tenant Load (0.0ms)  SELECT  "tenants".* FROM "tenants" WHERE (tenants.tenant_id IS NULL) AND "tenants"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /usr/local/rvm/gems/ruby-2.5.3/bundler/gems/milia-4c36b46f3f42/lib/milia/base.rb:126
  Rendering events/index.json.jbuilder within layouts/application
  Event Load (80.7ms)  SELECT "events".* FROM "events" WHERE (events.tenant_id = 1)
  ↳ app/views/events/index.json.jbuilder:1
  Rendered events/_event.json.jbuilder (1.1ms)
  Rendered events/_event.json.jbuilder (0.3ms)
  Rendered events/_event.json.jbuilder (0.2ms)
  Rendered events/_event.json.jbuilder (0.2ms)
  Rendered events/_event.json.jbuilder (0.3ms)

也许这与Rendering events/index.json.jbuilder within layouts/application办?

ruby-on-rails json
2个回答
1
投票

因为我需要编写一些代码,我现在张贴这作为一个答案:

你确定它做/events.json?或者是做/events呢? (看你的截图,我觉得你刚才输入在Chrome地址栏/events.json那里,因为它应该包括“主机名”有默认情况下(从据我所知)。

如何rails确定什么响应格式渲染是通过this doc

例:

GET /posts/5.xml   | request.format => Mime::XML
GET /posts/5.xhtml | request.format => Mime::HTML
GET /posts/5       | request.format => Mime::HTML or MIME::JS, or request.accepts.first`

因此,

  • GET /events.xml将“默认”渲染app/views/events.xml.TEMPLATE_ENGINE
  • GET /events.json将“默认”渲染app/views/events.json.TEMPLATE_ENGINE
  • GET /events将由“默认”从所述第一值中推断“接受”报头。即,如果我在这个网址在Chrome地址栏中键入,看着Chrome的网络选项卡,铬似乎产生了“接受”头如下: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 ......其中的第一个值是text/html,而就是为什么“默认” Rails会呈现app/views/posts.html.TEMPLATE_ENGINE。 ^这是目前我的猜测,为什么你看到的HTML代替,因为很可能你正在做的请求GET /events而不是正确的一个是GET /events.json。你仍然可以做但是GET /events,但你需要修改“接受”头等于"application/json"

调试:

为了检验上述我的理论,就可以打开Chrome的“网络选项卡”(点击HERE如果你不知道如何打开它)。然后做/发送请求,从正常到你的Rails端点(说不上来也许你点击一个按钮,发送请求?)。此后,“网络”选项卡将被填充。你会看到如下:Network Request Example Screenshot

正如你可以看到,该网址是posts.json这是它应该是什么。如果您是不是看到events而不是events.json,那么这就是你的问题。你需要确保它做的,而不是events.json,或者你仍然可以做events,但在更新请求中的“接受”头(你将在截图中看到,该值应该有"Accept: application/json"

附:所有我上面说的是,你是不是在控制器动作渲染“手动”的假设下,和你没有手动调用render(这应该怎么办Rails的默认值,Rails会隐式渲染的,也是我一直所描述上面我的回答)


0
投票

尝试在操作方法的最后一行添加respont_to :json

class EventsController < ApplicationController
  def index
    @events = Event.all
    resond_to :json # add this line
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.