加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:15:27 所属栏目:百科 来源:网络整理
导读:我在嵌入式json对象中遇到了不必要的根元素问题. 这是清理过的来源: 用户模型: class User ActiveResource::Base self.format = :json self.element_name = "user" #...end 控制器的动作’新’ def new @user = User.build @user.id = nilend User.build给
我在嵌入式json对象中遇到了不必要的根元素问题.
这是清理过的来源:

用户模型:

class User < ActiveResource::Base
      self.format = :json
      self.element_name = "user"
      #...
end

控制器的动作’新’

def new
 @user = User.build
 @user.id = nil
end

User.build给了我下一个json:

{
  "id":0,"user_name":null,"credit_card":
    {"number":null}
}

控制者的行动’创造’

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 %>

当我保存用户app时发送下一个json:

{
 "user"=>
   {"credit_card"=>
     {"credit_card"=>
       {"number"=>"xxxxyyyyzzzzaaaa"}
     },"user_name"=>"test"
    },"api_client_key"=>"top_secret"
}

问题在于重复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

感谢Oliver Barnes

解决方法

尝试
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读