Ruby on rails Rails模型JSON不显示关联

Ruby on rails Rails模型JSON不显示关联,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有以下型号: 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

我有以下型号:

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
我真的不知道怎么了


我真正想要的是显示company\u id和city\u id列。我有一个Acquisitions控制器,它用JSON显示这些列,即使没有respond_with方法。所以我不明白为什么它在这种情况下默认工作,而不是在这种情况下。我将Rails 4.0.0与Ruby 2.0.0一起使用。

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

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

但是,如果您有复杂的JSON响应,我建议您查看,或者让它工作起来。保持控制器不变,我将index.json.jbuilder从:

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


不确定你们对这个修复有何看法?

它可能与您的问题无关,但它是否打算用字符串类型定义
公司id
城市id
?是的。这是一个好的做法吗?默认情况下,ActiveRecord将主键定义为整数。所以如果你不改变主键的类型,你应该用整型列而不是字符串来引用它。是的,我确实用数据库迁移中的
execute“ALTER TABLE COMPANYS ADD primary key(name);”
将主键改成了字符串。我应该学会阅读,我的错误。我看不出来。嗯,那没用。我的json文件中有一个[]。我确实意识到我有Rails 4附带的jbuilder gem,因此更改jbuilder文件确实让我得到了结果。
respond_with Office.all(:include => [:company, :city])).as_json(:include => [:company,:city])
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