0

我有以下型号:

class Office < ActiveRecord::Base
  belongs_to :city
  belongs_to :company
end

class Company < ActiveRecord::Base
  has_one :acquirer
  has_many :offices 
  has_many :cities, through: :offices
end

class City < ActiveRecord::Base
  has_many :offices
end

我的办公室控制器是这样设置的:

class OfficesController < ApplicationController
  before_action :set_office, only: [:show, :edit, :update, :destroy]
  respond_to :html, :json
  def index
    respond_with(@offices = Office.all(:include => [:company, :city]))
  end
  ...

还有我的 schema.rb:

  create_table "cities", id: false, force: true do |t|
    t.string   "name",       null: false
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "companies", id: false, force: true do |t|
    t.string   "name",        null: false
    t.string   "website"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "acquirer_id"
  end

  create_table "offices", force: true do |t|
    t.boolean  "headquarters"
    t.string   "city_id"
    t.string   "company_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

我不太确定出了什么问题。

我真正想要的只是显示 company_id 和 city_id 列。我有一个采集控制器,即使没有 response_with 方法,它也会以 JSON 格式显示这些列。所以我不明白为什么它在这种情况下默认工作而不是在这种情况下工作。我正在使用带有 Ruby 2.0.0 的 Rails 4.0.0。

4

2 回答 2

0

我让它工作。保持控制器不变,我将 index.json.jbuilder 从:

json.array!(@offices) do |office|
  json.extract! office, :headquarters
  json.url office_url(office, format: :json)
end

至:

json.array!(@offices) do |office|
  json.extract! office, :headquarters, :company_id, :city_id
  json.url office_url(office, format: :json)
end

不知道大家怎么看这个修复?

于 2013-08-02T10:42:07.793 回答
0

您应该始终使用整数来定义外键。回到你的问题,你可以使用

respond_with Office.all(:include => [:company, :city])).as_json(:include => [:company,:city])

但是,如果您有复杂的 JSON 响应,我建议您查看RABLjbuilder

于 2013-08-02T10:06:58.450 回答