2011-08-23 5 views
2

정말 간단한 작업을 시도하는 사람이 올바른 주문을 제공 할 수 있습니까?임의의 belongs_to/중첩 된 상속 된 리소스 (Rails 3.1)를 사용하여 다형성 부분 렌더링

는 기본적으로 우리는 Biscuit 선택적 그래서 우리는 같은 경로를 싶습니다 User에 중첩 된 :

/biscuits 
/biscuits/1 
/users/2/biscuits 
/users/2/biscuits/3 

우리는 목록을 렌더링 할 부분 biscuits/_index를 호출 biscuits/index 같은 견해를 가지고있다. 나는 사용자의 프로필보기에서 users/edit을이 같은 부분을 호출하고 싶습니다하지만있는 resource_url 도우미가 사용하는 나는 분명 해요 :

resources :users do 
    resources :biscuits 
end 

class BiscuitsController < InheritedResources::Base 
    belongs_to :user, optional: true 
end 

사용자/edit.html.haml :

= render 'biscuits/index', biscuits: @user.biscuits.all 

비스킷/_index.html.haml : NoMethodError in Users#edit undefined method 'user_url' for #<UsersController>/users/1/biscuits에서 BiscuitsController에서 호출

- biscuits.each do |biscuit| 
    %tr 
     %td= biscuit.title 
     %td= link_to image_tag(biscuit.file_url(:thumb,:large)), resource_url(biscuit) 
     %td 
     = link_to 'Show', resource_url(biscuit) 
     &nbsp;|&nbsp; 
     %td 
     = link_to 'Edit', edit_resource_url(biscuit) 

이 부분 작품을 잘하지만 폭탄 UsersController에서 전화 할 때 /users/1/edit - resource_url은 비스킷 컬렉션이 아닌 사용자를 말합니다.

현재 컨트롤러에 관계없이 리소스/컬렉션을 리소스 모음으로 강제로 설정할 수 있습니까?

이 작업을 수행하는 더 좋은 방법은 무엇입니까? 또한

, 경로가 /users/1/biscuits를 통해 BiscuitsController를 호출하면 우리가 UsersController#collection#resource에서, UsersController 이러한 방법이라고 무시라고? 또는 하나의 요청 당 하나의 Controller만이 Rails에 의해 인스턴스화됩니까?

+0

또한 레이크 routes'이/사용자 ', 중첩 된 경로를 보여줍니다'주의 트릭을 수행하는 경우/: user_id/biscuits/: id'하지만 선택하지 않은 중첩되지 않은'/ biscuits/: id'를 보여주지는 않습니다 - 예상되는 행동입니까, 아니면 문제가 있습니까? – tribalvibes

답변

1

에 대한 경로 동작 - 내가 아는 한 중첩 및 중첩되지 않은 경로를 모두 사용하려면 실제로 두 번 정의해야합니다. 즉,이 중첩없이 액세스 할 의미가없는 경우에만 둥지 리소스에 더 나은 연습을 고려해야 할 것 같다 고 말했다

resources :users do 
    resources :biscuits 
end 
resources :biscuits 

. 비스킷 용 중첩되지 않은 경로 만 남겨두면 문제가 해결 될 수 있습니다.

resource_url에 관한 - 당신의 참조 resource_url하고 수집 방법 당신이 플러그인이나 보석을 사용하는 표시를, 당신이이 문제의 원인이 될 것으로 보인다 특히 이후 사용하는 플러그인이 무엇인지 모른 채 잘못 무슨 일이 일어나고 있는지 어렵다 .

따라서이라고

def nested_resource_path(*args) 
    args = args.compact 
    return args[0] if args.size == 1 
    return args 
end 

의 라인을 따라 도우미는 "resource_url을"대체 :


작동합니다 BiscuitsController 번호 인덱스를 액세스 할 때 @user이 전무는
nested_resource_path(@user, biscuit) and 
nested_resource_path(:edit, @user, biscuit) 

.얕은 경로에서

1

척, 즉 :

resources :users, :shallow => true do 
    resources :biscuits 
end 

다음 레이크 노선을 볼 그