2012-02-03 36 views
18

Tôi đang đăng một số JSON như mẫu JSON {:name => "hello"} vào bộ điều khiển Rails 3 của tôi ExampleController.Rails 3 params gói không mong muốn

Thay vì nhận được params như:

{:name => "hello"} 

tôi nhận được:

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

(Có dữ liệu JSON xuất hiện hai lần và hành động và điều khiển được bổ sung!)

Bất kỳ ý tưởng tại sao ?

+0

Bạn có đang đặt nội dung chấp nhận và Chấp nhận tiêu đề như tôi đã viết ở đây không? http://stackoverflow.com/questions/4914745/post-json-to-rails-server –

+0

Có - nó được đăng từ jQuery $ .ajax với loại: json – Blacksad

Trả lời

34

ActionController tự động thực hiện điều này cho các yêu cầu JSON để bạn có thể dễ dàng chuyển các tham số vào Example.create hoặc @example.update_attributes, có nghĩa là khách hàng không cần gói chúng cho mô hình của bạn - nó chỉ có thể bao gồm name et. al. ở cấp cao nhất của dữ liệu JSON và bộ điều khiển sẽ xử lý nhóm.

@example = Example.create params[:example] 

Mã số gói được tên của mô hình của bạn từ tên của bộ điều khiển, nhưng bạn có thể thay đổi nó bằng cách sử dụng wrap_parameters vĩ mô trong điều khiển của bạn:

wrap_parameters :thing 

Hoặc tắt nó đi với

wrap_parameters false 

Trong Rails 3.2, nếu mô hình của bạn sử dụng attr_accessible, tính năng gói thông số cũng sẽ loại trừ mọi thông số không thể truy cập vào hàng loạt đốt cháy. Bạn cũng có thể sử dụng macro để làm cho tính năng gói này áp dụng cho các loại nội dung khác ngoài JSON, nếu bạn muốn.

Theo mặc định trong ứng dụng Rails mới được tạo, điều này được định cấu hình cho tất cả các trình điều khiển sử dụng bộ khởi tạo. Tìm kiếm config/initializers/wrap_parameters.rb.

Các vấn đề liên quan