2012-08-07 2 views
0

레일 라우터 및 폼 생성기에 문제가 있습니다. 내 응용 프로그램에는 모델 및 컨트롤러에 대한 네임 스페이스 모듈이 있습니다. 모듈은 다른 프로젝트를보다 쉽게 ​​추상화하는 데 사용됩니다.모듈 접두사가없는 경로로 이름이 붙은 모델 객체 경로 경로

내가 "못생긴"경로 도우미가 없으므로 routes.rb 범위 방법 대신 네임 스페이스를 사용합니다. 내 경로 대신에만 taxonomy_path

원인

undefined method `taxonomy_taxonomy_path' 

: 나는 오류가 발생 :

scope module: :taxonomy do 
    resources :taxonomies do 
    resources :terms 
    end 
end 

문제는 내가 분류를 편집 (taxonomies/1/edit URL을) 할 때이다 :

그것은처럼 보인다

경로가 form_for @taxonomy에 도달하는 방법이 어떤 범위에 있습니까? 사용하지 않고 치료할 수없는 form_for @taxonomy, url: taxonomy_path(@taxonomy).

module Taxonomy 
    class Taxonomy < ActiveRecord::Base 
    has_many :taxonomy_terms, inverse_of: :taxonomy 
    has_many :terms, through: :taxonomy_terms 
    class Term < ActiveRecord::Base 
    has_one :taxonomy_term, inverse_of: :term 
    has_one :taxonomy, through: :taxonomy_term 

와 컨트롤러 : respond_with @taxonomy 내 컨트롤러 방법에 @taxonomy 객체는 항상 taxonomy_taxonomy_url

내 모델 refereces 때문에

module Taxonomy 
    class TaxonomiesController < ApplicationController 

답변

4

다음과 같은 방법으로 액티브의 모델 이름을 재정의 할 수

module Taxonomy 
    class Taxonomy < ActiveRecord::Base 
    def self.model_name 
     ActiveModel::Name.new("Taxonomy") 
    end 
    end 
end 

이것은 분류 모듈 아래이기 때문에 분류 클래스 taxonomy_taxonomy 이름을 생성 액티브 기본 명명 세대보다 우선합니다. 라우팅 이름 문제를 해결하고 원하는대로 적절한 경로 이름을 생성해야합니다.

+0

이것에 관해 하나의 질문이 있습니다. 이름 공간 접두사 "Taxonomy ::"없이 모델에 액세스 할 필요가 없을 때 네임 스페이스의 변경 모델 이름을 사용한 솔루션이 완벽합니다. 그러나 모듈 모델의 불충분 한 격리, 비표준 레일의 동작 또는 무엇인가와 같이 중요해야 할 문제가 있습니까? – rado

+0

나는 당신의 질문을 완전히 이해하지 못했습니다 - 당신은 이제 당신의 코드에서'Taxonomy :: Taxonomy' 대신에'Taxonomy'에 의해 Taxonomy 클래스에 접근한다는 것을 의미합니까? –

+0

물론 나쁘다. 모델이 아니라 모듈을 호출한다. 내 질문은 변경 모델 이름은 contra 생산적이지 않은 경우에만 경로 경로/URL을 접두사없이해야합니다. 업그레이 드 레일 등 미래의 문제와 마찬가지로 ... – rado

2

routes.rb이 시도 :

namespace :taxonomy do 
    resources :taxonomies do 
    resources :terms 
    end 
end 

이것은 아마 당신이 당신의 controll ers는 서브 디렉토리 taxonomy에도 있습니다.

+0

이 작동하지만 경로는 taxonomy_ 접두어입니다. 내가 "범위 모듈"을 사용하여 더 예쁜 경로를 가지고. – rado