2011-01-15 31 views
11

Tôi đang tạo API trong đường ray để hiển thị cho ứng dụng iPhone mà tôi đang làm việc. Tôi hiểu rằng thông thường bạn chỉ tạo một tài nguyên duy nhất khi đăng lên hành động tạo của bộ điều khiển trong Rails. Tuy nhiên, tôi không chắc chắn cách tốt nhất để tạo ra nhiều tài nguyên cùng một lúc. Có thể chấp nhận đăng JSON/XML có chứa nhiều tài nguyên để tạo cùng loại trong một POST không?Tạo nhiều tài nguyên trong một RESTful POST duy nhất trong đường ray

Ví dụ: tạo thư và sau đó thêm nhiều người nhận. Có một mô hình cho bản thân thông báo, và sau đó là một mô hình cho một người nhận thuộc về thông báo. Tôi tạo tin nhắn bằng cách đăng lên/tin nhắn, nhưng sau đó nếu tôi có 50 người nhận để thêm vào tin nhắn đó thì sao? Tạo 50 BÀI ĐĂNG riêng biệt cho/tin nhắn/1/người nhận có vẻ quá nhiều và lãng phí. cách tốt nhất để làm việc này là gì?

Tôi mới sử dụng ứng dụng Rails và RESTful nói chung và rất cảm kích mọi trợ giúp.

Trả lời

4

Bạn có thể sử dụng accepts_nested_attributes_for cho việc này. Trong mô hình gốc của bạn - nơi bạn xác định liên kết has_many - bạn sẽ thêm accepts_nested_attributes_for cho cùng một tên liên kết. Nhiều như thế này:

class Message < ActiveRecord::Base 
    has_many :recipients 
    accepts_nested_attributes_for :recipients 
end 

class Recipient < ActiveRecord::Base 
    belongs_to :message 
end 

Sau đó, trong hình thức của thông điệp của bạn, bạn muốn có một loạt các lĩnh vực cho người nhận tên giống như message[recipients_attributes][][name]message[recipients_attributes][][email]. Hoặc bạn có thể sử dụng form_forfields_for (bạn chỉ cần nhớ tạo ít nhất một cá thể trong bộ sưu tập has_many của mình khi bạn truy cập trang new).

Để biết thêm (và tốt hơn) ví dụ, watch this Railscast.

+1

Tuyệt, chính xác những gì tôi đang tìm kiếm. Cảm ơn! Cũng tìm thấy điều này có ví dụ JSON: http://www.rogue-development.com/blog2/2009/05/creating-nested-objects-with-json-in-rails/ –

0

Nếu bạn đang đăng dữ liệu XML, bạn cũng cần phải bao gồm loại = "mảng". Dưới đây là một ví dụ:

<message> 
    <recipients_attributes type="array"> 
    <recipient> 
     <name>Some Name</name> 
     <email>[email protected]</email> 
    </recipient> 
    <recipient> 
     <name>Some Name 2</name> 
     <email>[email protected]</email> 
    </recipient> 
    <recipients_attributes> 
</message> 

Nếu bạn không, bạn sẽ nhận được lỗi như "không xác định phương pháp 'stringify_keys' cho mảng" và 'không thể chuyển đổi chuỗi thành Integer' tùy thuộc vào phiên bản của Rails. Chúng có nguồn gốc từ active_record/nested_attributes.rb.

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