ruby-on-rails - 在 ActiveResource 查询中禁用嵌入对象中的 json 根元素

标签 ruby-on-rails json ruby-on-rails-3 activeresource

我在嵌入式 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/

相关文章:

javascript - 将文本文件转换为 JSON

ruby-on-rails - 从wrapbootstrap实现bootstrap主题

java - 即使存在默认构造函数,也无法从对象值反序列化(没有基于委托(delegate)或属性的创建者)

ruby-on-rails - 在一个区域显示管理属性但在另一个区域不显示

ruby-on-rails - 在惯用的 ActiveRecord 中查找或创建唯一的关联对象?

ruby-on-rails - 尝试升级 rails 依赖项会导致序列化程序引发错误 : undefined method `model_name' for Hash:Clas

json - 如何在 Go 中将字符串转换为 JSON?

ruby-on-rails - 使用 Rails3 中的 Mailgun HTTP api

ruby-on-rails - 设计助手(authenticate_user!,current_user,user_signed_in?)未初始化

ruby-on-rails -/usr/bin/env : ruby 1. 8:没有这样的文件或