min*_*bug 8 json ruby-on-rails activeresource ruby-on-rails-3
我在嵌入式json对象中遇到了不必要的根元素问题.这是清理过的来源:
用户模型:
class User < ActiveResource::Base
self.format = :json
self.element_name = "user"
#...
end
Run Code Online (Sandbox Code Playgroud)
控制者的行动'新'
def new
@user = User.build
@user.id = nil
end
Run Code Online (Sandbox Code Playgroud)
User.build给了我下一个json:
{
"id":0,
"user_name":null,
"credit_card":
{"number":null}
}
Run Code Online (Sandbox Code Playgroud)
控制者的行动'创造'
def create
@user = User.new(params[:user])
@user.save
end
Run Code Online (Sandbox Code Playgroud)
查看'_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 %>
Run Code Online (Sandbox Code Playgroud)
当我保存用户app时发送下一个json:
{
"user"=>
{"credit_card"=>
{"credit_card"=>
{"number"=>"xxxxyyyyzzzzaaaa"}
},
"user_name"=>"test"
},
"api_client_key"=>"top_secret"
}
Run Code Online (Sandbox Code Playgroud)
问题在于重复credit_card密钥.我怎么解决呢?
最终解决方案
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
Run Code Online (Sandbox Code Playgroud)
感谢Oliver Barnes
oli*_*nes 11
尝试
ActiveResource::Base.include_root_in_json = false
Run Code Online (Sandbox Code Playgroud)
如果您需要保留顶部根并只删除关联的信用卡对象的根,那么您可能需要使用#to_json自定义json输出,如下所示:
def to_json(options = {})
{ "user"=>
{"credit_card"=>
{"number"=> self.credit_card.number }
},
"user_name"=> self.user_name
}.to_json(options)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7852 次 |
| 最近记录: |