Ruby on rails Ruby/Rails中的嵌套JSON响应
我有以下型号:Ruby on rails Ruby/Rails中的嵌套JSON响应,ruby-on-rails,ruby,json,Ruby On Rails,Ruby,Json,我有以下型号: class Account < ActiveRecord::Base belongs_to :user has_and_belongs_to_many :sites 类帐户帐户,其中帐户包含用户id。您有几个选项: site.as_json(include:{accounts:{include::user}})。有关用法的更多信息,请参见此处: 重写serializable_hash方法。缺点是,每次调用到_json时,它都会启动,并且您可能希望每次根据用例对站点
class Account < ActiveRecord::Base
belongs_to :user
has_and_belongs_to_many :sites
类帐户
及
class用户
及
类站点
我试图返回一个站点的JSON表示,其中列出了所有帐户信息和嵌套在其中的用户信息
我将
作为json
添加到站点的:include=>[:accounts]
中,并将相同的方法添加到:include=>[:user]
中,但是我的响应中似乎没有得到嵌套的输出。我只获得站点->帐户,其中帐户包含用户id。您有几个选项:
site.as_json(include:{accounts:{include::user}})
。有关用法的更多信息,请参见此处:serializable_hash
方法。缺点是,每次调用到_json
时,它都会启动,并且您可能希望每次根据用例对站点
进行不同的序列化站点
上创建自己的自定义方法,例如我的序列化站点
,它将返回所需的哈希
结构。然后您可以调用site.my\u serialized\u site.to\u json
。您可能还希望创建一些范围,其中包含您希望包含的所有内容,然后调用:Site.my|u all_inclusive_scope.map{x|x.my_序列化_Site.to_json}
class Site
scope :my_all_inclusive_scope, -> { includes(accounts: :user) }
def my_serialized_site
{id: self.id, accounts: {accounts.map(&:my_serialized_account)}}
end
end
class Account
def my_serialized_account
{id: self.id, user: {user.my_serialized_user}}
end
end
class User
def my_serialized_user
{ id: self.id, name: name }
end
end
ActiveModel::Serializer
:
rabl
:
您确定
site.as_json(include:{accounts:{include::user}})
不起作用吗?我在一个类似的结构上试过这个,它对我有效。这确实有效。我没有像您那样嵌套as_json方法。谢谢!
class Site < ActiveRecord::Base
has_and_belongs_to_many :accounts
class Site
scope :my_all_inclusive_scope, -> { includes(accounts: :user) }
def my_serialized_site
{id: self.id, accounts: {accounts.map(&:my_serialized_account)}}
end
end
class Account
def my_serialized_account
{id: self.id, user: {user.my_serialized_user}}
end
end
class User
def my_serialized_user
{ id: self.id, name: name }
end
end