我在嵌入式 json 对象中遇到了不必要的根元素问题。
这是清理后的源:
用户模型:
class User < ActiveResource::Base
self.format = :json
self.element_name = "user"
#...
end
Controller 的 Action "new"
def new
@user = User.build
@user.id = nil
end
User.build 给了我下一个 json:
{
"id":0,
"user_name":null,
"credit_card":
{"number":null}
}
Controller 的 Action “创建”
def create
@user = User.new(params[:user])
@user.save
end
查看'_form.html.erb'
<%= form_for(@user) do |f| %>
<%= f.label :user_name %>
<%= f.text_field :user_name %>
<%= f.fields_for @user.credit_card do |cc_f| %>
<%= cc_f.label :number %>
<%= cc_f.text_field :number %>
<% end %>
<% end %>
当我保存用户应用程序时发送下一个 json:
{
"user"=>
{"credit_card"=>
{"credit_card"=>
{"number"=>"xxxxyyyyzzzzaaaa"}
},
"user_name"=>"test"
},
"api_client_key"=>"top_secret"
}
问题在于credit_card key 的重复。我该如何解决?
最终解决方案:
class User < ActiveResource::Base
self.include_root_in_json = false
self.format = :json
self.element_name = "user"
def to_json(options = {})
{
self.class.element_name => self.attributes
}.to_json(options)
end
# ...
end
感谢奥利弗·巴恩斯
最佳答案
尝试
ActiveResource::Base.include_root_in_json = false
如果您需要保留顶级根并删除关联的信用卡对象的根,那么您可能需要使用 #to_json 自定义 json 输出,如下所示:
def to_json(options = {})
{ "user"=>
{"credit_card"=>
{"number"=> self.credit_card.number }
},
"user_name"=> self.user_name
}.to_json(options)
end
关于ruby-on-rails - 在 ActiveResource 查询中禁用嵌入对象中的 json 根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499336/