2011-01-15 5 views
11

레일즈에 API를 만들어서 현재 작업중인 iPhone 응용 프로그램에 표시합니다. 일반적으로 레일스에서 ​​컨트롤러의 생성 작업에 게시 할 때만 단일 리소스를 생성한다는 것을 알고 있습니다. 그러나 한 번에 많은 리소스를 만드는 가장 좋은 방법은 확실하지 않습니다. 단일 POST에서 동일한 유형으로 생성 될 여러 리소스를 포함하는 JSON/XML을 게시 할 수 있습니까?레일에서 단일 RESTful POST로 여러 리소스 만들기

예를 들어, 메시지를 작성한 다음 많은 수신인을 추가하십시오. 메시지 자체에 대한 모델이 있고 메시지에 속한받는 사람에 대한 모델이 있습니다./메시지에 게시하여 메시지를 만들지 만 그 메시지에 추가 할 수신자가 50 명인 경우 어떻게됩니까?/메시지/1/수신자에게 50 개의 개별 POST를하는 것은 과도하고 낭비적인 것 같습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

저는 Rails와 RESTful 앱에 일반적으로 익숙하며 어떤 도움을 주셔서 감사합니다.

답변

4

이 경우 accepts_nested_attributes_for을 사용할 수 있습니다. 부모 모델에서 has_many 연관을 정의하는 곳에서 을 추가하면 동일한 연관 이름이 부여됩니다. 이 같은 많은 :

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

class Recipient < ActiveRecord::Base 
    belongs_to :message 
end 

그런 다음, 메시지의 형태로, 당신은 message[recipients_attributes][][name]message[recipients_attributes][][email] 같은 이름의받는 사람에 대한 필드의 무리이있을 것이다. 또는 form_forfields_for을 사용할 수 있습니다 (new 페이지로 이동할 때 has_many 컬렉션에 적어도 하나의 인스턴스 만 작성하면됩니다).

더 많은 (더 좋은) 예를 들면 watch this Railscast.

+1

내가 찾고있는 멋진 기능. 감사! JSON 예제가있는이 또한 발견 : http://www.rogue-development.com/blog2/2009/05/creating-nested-objects-with-json-in-rails/ –

0

XML 데이터를 게시하는 경우 type = "array"도 포함시켜야합니다. 당신이, 당신이 "정의되지 않은 메서드`배열에 대한 stringify_keys '"와 같은 오류 "정수로 문자열을 변환 할 수 없습니다"거야하지 않는 경우 레일의 버전에 따라

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

예를 들면 다음과 같습니다이다. active_record/nested_attributes.rb에서 시작됩니다.

관련 문제