2014-12-03 2 views
1

나는 새로운 인물에 연결하는이 코드를 가지고 :레일이 작동하지 routes.rb라는 이름의 경로와 함께 원하는대로

<%= link_to "New Persona", genesis_path, class: "new-persona-button" %> 

내 routes.rb 파일 : 새로운 인물에

Bazleyapp::Application.routes.draw do 

    resources :users, only: [:index, :create] 
    resources :personas, only: [:index, :create] 

    root      'static_pages#home' 

    get  'signup',     to: 'users#new' 
    get  '/:callsign',    to: 'users#show',  as: :user 
    get  '/:callsign/settings', to: 'users#edit',  as: :edit_user 
    patch '/:callsign',    to: 'users#update', as: :update_user 
    delete '/:callsign/terminated', to: 'users#destroy', as: :destroy_user 

    get  'genesis',    to: 'personas#new' 
    get  '/:callsign',    to: 'personas#show',  as: :persona 
    get  '/:callsign/settings', to: 'personas#edit',  as: :edit_persona 
    patch '/:callsign',    to: 'personas#update', as: :update_persona 
    delete '/:callsign/terminated', to: 'personas#destroy', as: :destroy_persona 

end 

클릭

Started GET "/genesis" for ::1 at 2014-12-03 00:25:38 +0000 
Processing by UsersController#show as HTML 
Parameters: {"callsign"=>"genesis"} 
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."callsign" = $1 LIMIT 1 [["callsign", "bazzer"]] 
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."callsign" = $1 LIMIT 1 [["callsign", "genesis"]] 
Completed 500 Internal Server Error in 21ms 

NoMethodError (undefined method `activated' for nil:NilClass): 
app/controllers/users_controller.rb:17:in `show' 

는 genesis_p 타격해야하는 경우가 user_path (사용자 번호 쇼)를 때리고 의미 : 버튼이 오류가 발생합니다 ath. 하지만 <%= link_to "New Persona", genesis_path, class: "new-persona-button" %>으로 기원 경로를 맞추라고했습니다. 당황 스럽네. 오류는 어디에 있습니까?

답변

1

당신은 루트 파일이 위에서 아래로 읽을 것을 알고있다
get '/:callsign', to: 'users#show', as: :user 

전에

get 'genesis', to: 'personas#new' 

를 넣습니다.

+0

하지만 왜 'genesis_path'를 사용하여 페르소나/새로운 액션으로 바로 이동하지 않습니까? – Bazley

1

당신이 여기에있는 것이 여러 경로를 덮어 쓰는 것으로 생각하지 않습니다. 고유 한 이름 공간을 별도의 네임 스페이스에 두는 것이 좋습니다.

예 :이 노선에 대한 별도의 경로

Bazleyapp::Application.routes.draw do 

    resources :users, only: [:index, :create] 
    resources :personas, only: [:index, :create] 

    root      'static_pages#home' 

    namespace :users do 
    get  'signup',     to: 'users#new' 
    get  '/:callsign',    to: 'users#show',  as: :user 
    get  '/:callsign/settings', to: 'users#edit',  as: :edit_user 
    patch '/:callsign',    to: 'users#update', as: :update_user 
    delete '/:callsign/terminated', to: 'users#destroy', as: :destroy_user 
    end 

    namespace :personas do 
    get  'genesis',    to: 'personas#new' 
    get  '/:callsign',    to: 'personas#show',  as: :persona 
    get  '/:callsign/settings', to: 'personas#edit',  as: :edit_persona 
    patch '/:callsign',    to: 'personas#update', as: :update_persona 
    delete '/:callsign/terminated', to: 'personas#destroy', as: :destroy_persona 
    end 
end 

그런 식으로.

블록을 리소스에 추가 할 수 있으며 분할 할 필요가 없습니다. 예 :

resources :users, only: [:index, :create] do 
    get  'signup',     to: 'users#new' 
    get  '/:callsign',    to: 'users#show',  as: :user 
    get  '/:callsign/settings', to: 'users#edit',  as: :edit_user 
    patch '/:callsign',    to: 'users#update', as: :update_user 
    delete '/:callsign/terminated', to: 'users#destroy', as: :destroy_user 
end 
+0

감사합니다. 하지만 분명히 내 원래 코드가 작동해야하며, 이것이 필요하지 않아야합니까? 나는 명명 된 경로를 사용했다. 반드시 genesis_path를 사용하도록 레일스에 지시함으로써 user_path를 건너 뛰어야합니까? – Bazley

+0

나는 이름 붙여진 루트의 전체 아이디어가 그들에게 개별적인 이름을 줄 수 있었고 하나의 루트가 다른 것과 혼동되지 않았 음을 확신했다. – Bazley

+0

'get 'genesis''는'genesis_path'라는 명명 된 경로를 생성합니까? – Bazley

관련 문제