2011-04-14 3 views
3

/items 그래서 current_user.items 잘 작동, 현재 사용자라우팅 : 결합 자원과 중첩 된 자원

내가 사용자와 항목 사이의 관계를 정의하기위한 항목 만 나열해야합니다 모든 항목
/user/items을 나열해야합니다.

내 질문은 :
어떻게 items#index 조치는 알고 있지가 함께 @items을 채우는 것을 알기 위해 직접 또는 사용자 자원을 통해 호출되었는지 여부?

# routes.rb 
resources :items 
resource :user do 
    resources :items 
end 

# items_controller.rb 
class ItemsController < ApplicationController 
    def index 
    @items = Item.all 
    end 
end 

# users_controller.rb 
class UsersController < ApplicationController 
    def show 
    @user = current_user 
    end 
end 
+0

이것은 일반적으로 할 수있는 일로 보입니다. 아마도 나는 그것에 대해 잘못된 길을 가고 있습니다. 하나의 아이디어는 두 개의 컨트롤러 (Items 및 UserItem)를 갖는 것입니다. 이것이 더 깔끔한 해결책이 될 것인가 아니면 일반적으로 단일 모델에 대해 여러 컨트롤러를 갖는 것이 좋지 않은가? – gjb

답변

2

코드를 두 개의 컨트롤러 (하나의 네임 스페이스)로 분리하여 해결했습니다. 나는 이것이 단일 컨트롤러에 조건부 로직을 추가하는 것보다 더 깨끗하다고 ​​생각한다.

# routes.rb 
resources :items 
namespace 'user' do 
    resources :items 
end 

# items_controller.rb 
class ItemsController < ApplicationController 
    def index 
    @items = Item.all 
    end 
end 

# user/items_controller.rb 
class User::ItemsController < ApplicationController 
    def index 
    @items = current_user.items 
    end 
end 
4

그것은 해키 보이지만, 내 첫 번째 아이디어 :

resource :user do 
    resources :items, :i_am_nested_resource => true 
end 

class ItemsController < ApplicationController 
    def index 
    if params[:i_am_nested_resource] 
     @items = current_user.items 
    else 
     @items = Item.all 
    end 
    end 
end 

이었다 아니면 짐승 길을 갈 수 있습니다 귀하의 요청 URL을 :) 구문 분석합니다.

+0

고마워요, 해킹일지도 모르지만 작동합니다! – gjb

관련 문제