2016-05-09 4 views
1

Некоторые строки-члены с определенными именами не добавляются с ожидаемым :id внутри строки запроса. Эти маршруты:Не все маршруты членов получают идентификатор в querystring

resources :tests do 
    member do 
    get :foo 
    end 
end 

resources :contacts do 
    member do 
    get :foo 
    end 
end 


resource :tasks do 
    member do 
    get :foo 
    end 
end 

resource :fruits do 
    member do 
    get :foo 
    end 
end 

resource :cars do 
    member do 
    get :foo 
    end 
end 

resources :appointments do 
    member do 
    get :foo 
    end 
end 

Производит это:

  foo_test GET   /tests/:id/foo(.:format)     tests#foo 
     foo_contact GET   /contacts/:id/foo(.:format)    contacts#foo 
      foo_tasks GET   /tasks/foo(.:format)      tasks#foo 
     foo_fruits GET   /fruits/foo(.:format)      fruits#foo 
      foo_cars GET   /cars/foo(.:format)      cars#foo 
    foo_appointment GET   /appointments/:id/foo(.:format)   appointments#foo 

Задачи, фрукты и автомобили не имеют идентификатор. Почему это?

ответ

2

Ваша проблема в resource (единственное число) против resources (множественное число). Вы заметите, что каждый раз, когда у вас есть :id на вашем маршруте (тест, контакт, встречи), он объявляется с использованием ресурсов и в противном случае использует ресурс.

Используя resource (единственное), вы неявно заявляете, что у вас есть только один ресурс этого типа, поэтому нет необходимости и id, поэтому его здесь нет.

Вы можете найти более подробную информацию здесь: Difference between resource and resources methods

+0

: FACEPALM. Не могу поверить, что я пропустил это. –