2011-03-31 17 views
8

Yerleşik json nesnesinde gereksiz kök öğesinde sorun yaşıyorum. İşte temizlenmiş kaynaklar ise:ActiveSource sorgusundaki gömülü nesnelerde json kök öğesini devre dışı bırakma

Kullanıcı modeli:

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

Denetçi'nin eylemi:

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

User.build bana ertesi json veriyor 'yeni'

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

Denetçi'nin eylem 'oluştur'

def create 
    @user = User.new(params[:user]) 
    @user.save 
end 

Görünüm '_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 %> 

Ben kullanıcı uygulama sonraki json göndermek saklıyorum:

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

Sorun CREDIT_CARD anahtarları kopyalama içindedir. Bunu nasıl çözebilirim?


Final çözüm:

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 

sayesinde üst kök tutmak ve sadece ilişkili kredi kartı nesnenin kökünü çıkarmak gerekirse

cevap

11

ActiveResource::Base.include_root_in_json = false 

deneyin Oliver Barnes'a daha sonra json çıktısını #to_json ile aşağıdaki gibi özelleştirebilirsiniz:

def to_json(options = {}) 
    { "user"=> 
     {"credit_card"=> 
     {"number"=> self.credit_card.number } 
     }, 
     "user_name"=> self.user_name 
    }.to_json(options) 
end 
+1

neden questrion ActiveResource ile ilgili ise ActiveRecord? – Fivell

+0

ActiveResource aynı parametrelere sahiptir. Ancak "kullanıcı" öğesini de kaldırır. –

+0

Aşağıdaki isteklere ihtiyacım var: "{ " kullanıcı "=> {" kullanıcı_adı "=>" sınama "," credit_card "=> {" number "=>" ... "}}, " api_client_key "= > "top_secret" } ' Ama olsun ' { "user_name" => "test", "CREDIT_CARD" => { "numara" => "..."}, "api_client_key" = > "top_secret" } ' –

İlgili konular