2012-02-03 23 views
18

Bazı JSON'u {:name => "hello"} JSON formu gibi Rails 3 denetleyici Örnek Kontrolörüne gönderiyorum.Raylar 3 param istenmeyen ambalajlama

yerine benzeri params alma:

konusunda fikrin

{:name => "hello", :controller => "example", :action => "index", :example => {:name => "hello"} 

(Evet JSON veri iki kez görünür ve eylem ve denetleyici eklenir!):

{:name => "hello"} 

alıyorum niye ya ? Kolayca istemci modeliniz için onları paketlemek gerek olmadığı anlamına gelir Example.create veya @example.update_attributes, içine parametreleri geçirebilmesi için

+0

Buraya yazdığım içeriği kabul et ve kabul et başlıklarını ayarlıyor musunuz? http://stackoverflow.com/questions/4914745/post-json-to-rails-server –

+0

Evet - jQuery $ .ajax 'den türetilmiştir: json – Blacksad

cevap

34

ActionController otomatik JSON istekleri için bunu yapar - sadece name et içerebilir. ark. JSON verilerinizin en üst düzeyinde ve denetleyici gruplamayı ele alır.

@example = Example.create params[:example] 

parametre sarma kod denetleyici adından modelinizin adını alır, ancak denetleyicisi wrap_parameters makro kullanarak değiştirebilirsiniz:

wrap_parameters :thing 

Ya

ile kapatmak Modeliniz attr_accessible kullanıyorsa
wrap_parameters false 

yılında Raylar 3.2, parametre sarma özelliği de kitle eşek için erişilebilir olmayan herhangi parametreleri hariç tutar ignment. Makroyu, bu sarma özelliğini JSON'un yanı sıra diğer içerik türlerine de uygulamak için de kullanabilirsiniz.

Yeni oluşturulan Rails uygulamasında varsayılan olarak, bu bir başlatıcı kullanılarak tüm denetleyiciler için yapılandırılmıştır. config/initializers/wrap_parameters.rb'a bakın.