2013-01-24 2 views
0

그래서 나는 범위 경로와이 문제에 달려 form_for : form_for and scopes, rails 3어떻게 레일 경로 헬퍼에서 (PUT 대 GET) 메서드를 재정의 할 수 있습니까?

난 그냥 범위를 모든 방법을 원하지 않기 때문에, 나는 모든 GET을 제외한 '/ 관리'에되고 싶어하지만 내 문제가 더 나쁘다/쇼 .

scope '/admin' do 
    resources 'lessons', except: [:show] 
end 
get "lessons/:id" => "lessons#show", :as => "lesson" 

실행 레이크 노선 사실 유일한 방법으로 다른 lesson_path의 두 버전, GET 대 어디다 내가 원하는 것을 보여 않습니다

그래서 내 routes.rb는 다음과 같이 있습니다. 당신이 뭔가를 할 경우 그래서 솔루션 다른 제공 :

url = @lesson.persisted? ? lesson_path(@lesson) : lessons_path 
form_for @lesson, url: url do 

lesson_path (@lesson는) 항상 여전히 깨/관리자 접두사가없는 GET 경로를 반환하기 때문에 나를 위해 작동하지 않습니다 내 형태.

그래서 알아낼 수없는 것은 레일 경로 도우미에서/admin으로 시작하는 경로를 사용할 수 있도록 메서드를 지정할 수 있습니까? 아니면이 일을하는 완전히 다른 방법이 있습니까? 나는 내가 할 수있는 동굴을 알고 단순히 변경하여 명확하게 :

get "lessons/:id" => "lessons#show", :as => "lesson" 

get "lessons/:id" => "lessons#show", :as => "show_lesson" 

에 있지만이 시점에서 내가 가능한 경우 알고 그냥 궁금 해요 그래서 "권리"어떤 경우 방법.

+0

btw, 나는 현재 PUT의 경우 수동으로 생성하는 URL 앞에 '/ admin'이라는 접두사를 붙이는 작업을하고 있습니다.이 작업은 확실히 엉터리 해결책입니다. – eagspoo

답변

0

난 당신이 구문을 찾고 생각 : 그렇지 않은 경우

<%= form_for [:admin, @lesson] do |f| %> 
    # form goes here 
<% end %> 

persisted?, 또는 admin_lessons_path입니다 admin_lesson_path@lesson 경우라는 다형성 경로 도우미를 구축 할 것입니다. admin_lesson_path 도우미는 @lesson 개체를 전달하므로 경로는 admin/lessons/1과 비슷합니다. admin_lessons_path/admin/lessons을 생성합니다. 이 양식은 레코드가 지속되는지 여부에 따라 POST 또는 PUT을 사용할 지 여부를 알 수 있습니다.

당신은 당신의 경로에있는 라우팅 helpe을 정의 할 수는 다음과 같이 파일 :

namespace :admin do 
    resources :lessons 
end 

이 컨트롤러의 네임함으로써, 몇 가지 장점이 있습니다.

module Admin 
    class LessonsController < BaseController 

    end 
end 

그리고 BaseController의 (a before_filter 등) 로직을 포함합니다 : 그 중 하나는 단일 네임 스페이스 뒤에 모든 관리자-Y 물건을 넣고 기본 컨트롤러에서 네임 스페이스 상속에서 모든 것을 할 수 있다는 것입니다 사용자가 해당 컨트롤러에서 작업을 수행 할 수 있는지 여부를 제한합니다.

이 네임 스페이스가있는 컨트롤러 안에 모든 admin-y 항목을 넣으면 모든 관리 작업을 한 곳에서 처리하고 모든 사용자 대책 작업을 다른 곳에서 유지하게됩니다. "관심사의 분리"에 대해 들어 본 적이 있다면, 이것이 좋은 예입니다.