2013-04-19 6 views
-2

고객 및 주문 테이블이 있으며 각 고객은 많은 주문을받을 수 있다고 가정 해보십시오. 레일에 우리가 편안한 스타일로 이러한 자원을 표현하는 것이 좋습니다 때문에레일, 마스터 디테일 구현, 아직 RESTful 유지

, 우리의 자원의 각각은,

  • 보여

    • 인덱스 다음 작업에 응답합니다
    • 편집
    • 새로운
    • 만들기
    • 삭제

    지금까지 모두 매우 공정하고 평범합니다. 하지만 이제는 고객의 쇼 페이지를 열 때마다 모든 주문을 담은 세부 테이블을 보여주고 싶다고 말합니다.
    이것은 매우 보편적 인 요구이지만, 편안한 접근의 정확성을 "부정하게"하지는 않습니까?
    두 리소스를 "보기 수준"에서 "매시 (mashing)"한 것처럼 해결 방법이 있습니까?

  • +1

    가 이해가 안 :-) : REST는 당신을 방지하지 않습니다 쇼 뷰에 관련 리소스 목록을 표시합니다. 그리고 레일은 [중첩 된 자원] (http://guides.rubyonrails.org/routing.html#nested-resources) –

    답변

    1

    레일스의 기본 규칙은 RESTful 애플리케이션을 보장하며 루트에서 맞춤 이름을 사용하는 경우에만 비 안정적 인 방법이 될 수 있습니다.이 경우에는 추가 코드 비트를 추가하여 지정해야합니다 HTTP 메소드

    그래서, 당신은보기 수준에서, 당신은 이런 일이있을 수 제안하는지 달성하기 :

    응용 프로그램/뷰/고객/show.html.erb

    .... 
    <% if customer.orders.any? %> #the orders method is provided on `customer` by defining the `has_many` and `belong_to` associations 
        <%= render @orders $> 
    

    그리고 당신을 customers_controller.rb 파일의 show 작업에서 @orders을 정의해야합니다.

    이것은 RESTful 일뿐만 아니라 Rails의 기본 규칙에서도 작동합니다.

    +0

    을 지원합니다. 미안하지만 작동하지 않습니다. "ActionView :: MissingTemplate in Customers # show"및 "Missing partial orders/order"오류가 발생합니다. 이 퍼즐. 최악의 경우 모델 렌더링이나 렌더링과 같은 관계 렌더링에 대한 설명서를 찾지 못했습니다. http://api.rubyonrails.org/classes/ActionView/Helpers/RenderingHelper.html 여기에서 보았습니다. http://api.rubyonrails.org/classes/ActionController/Base.html#M000658. 이것에 대한 흔적은 없습니다. 이 주제를 확장 할 수 있습니까? tnx – AgostinoX

    +0

    명백한 질문은 app/views에 show.html이라는 파일이 있습니까? 또한 app/views/orders에서 부분을 호출하는 경우 _order.html.erb로 저장됩니까? 위의 질문에 이미 작성한 코드를 추가하면 거기에서부터 시작할 수 있습니다. – aceofbassgreg

    +1

    (위의 디렉토리가 누락 되었기 때문에)'show.html.erb' 파일은 appp/views/customers 디렉토리에 있어야합니다. 문서화 된 예제에서 [Hartl] (http://ruby.railstutorial.org/chapters/user-microposts#sec-augmenting_the_user_show_page)은 사용자의 미세 포스트를 표시하는 페이지를 설정하는 좋은 예를 통해 독자를 안내합니다. 이게 도움이 돼. – aceofbassgreg

    1

    당신이 나열한 행동은 뭔가를 RESTful하게 만드는 것이 아닙니다. 응용 프로그램을 RESTful로 간주해야하는 특성이 많이 있습니다. 이러한 특성 중 일부는 다음과 같습니다

    그것이 URI에 의해 식별된다
  • 자원 자원의 저장소로 생각됩니다
    • 리소스와 상호 작용하기위한 균일 한 인터페이스가 - GET의 HTTP 동사, POST , PUT, DELETE

    레일에 관계없이 자연에서 편안하고 있는지의 여부, HTTP 요청을 수신하고 응용 프로그램의 기능을 호출을 담당, 통해 서 h 라우팅. Rails 라우팅은 앞서 언급 한 HTTP 동사를 URI와 결합하여 호출 할 컨트롤러를 결정합니다. 기본적으로 Rails는 RESTful 패러다임을 따르고 규칙에 따라 나열된 동작에 동사/URI 조합을 매핑하지만 동작 자체와 단일 컨트롤러로 묶여 있다는 사실은 REST의 일부가 아닙니다. 레일 컨벤션.

    /customers    // the list of all customers, GET/POST -> index/create 
    /customers/new   // a form for creating a customer, GET -> new 
    /customers/{id}  // a single customer, GET/PUT/DELETE -> show/update/destroy 
    /customers/{id}/edit // a form for editing a customer, GET -> edit 
    

    자원 하위 자원을 포함 할 수 있으며 레일이 완전히 것을 지원

    는 사실, 레일의 기본 라우팅은 하나의 컨트롤러와 액션에 4 개 가지 자원을 매핑합니다. 하위 자원이 될 수 있습니다

    /customers/{id}/orders // the list of all orders for a particular customer 
    

    REST의 또 다른 중요한 부분이 서로 다른 표현을 가지는 자원을 지원하는, 즉 HTML, XML, JSON 등 고객들이 무엇을 표현 전달하기 위해 HTTP 헤더를 사용 여부 (Content-Type 헤더를 사용하여) 앱으로 전달되고 (보통 Accept 헤더를 사용하여) 응답으로 받아 들일 것입니다.

    자원 표현이 어떻게 보이는지를 결정하는 응용 프로그램에 따라 다릅니다. 일반적으로 리소스는 "씬"또는 "팻"이됩니다. "씬 (thin)"리소스는 단순히 하위 리소스에 대한 링크가있는 리소스이며이를 얻기 위해서는 추가 호출이 이루어져야합니다. "뚱뚱한"자원에는 그 자원에 포함되어있는 완전한 하위 자원이 포함됩니다. 일반적으로 HTML 표현을 사용하면 응용 프로그램에서 "뚱뚱한"자원의 일부 형식을 반환합니다. 이것에 관해서 RESTful이 아닌 것은 - 당신이 당신의 어플리케이션에 대해 원하는 것을 정확히 설명하고 있습니다.

    그래서 그 말을 내 먼 길이었다 "하위 자원을 표시하여 편안하고없는 두려워하지 않습니다 - 그것은 완벽하게 괜찮아요"

  • 관련 문제