2015-10-29 4 views
0

Я унаследовал это приложение (Rails 4.2.3, Ruby, 2.2.2) и есть некоторые вложенные ресурсы определяются как:Рельсы вложенные ресурсы URL

resources :meetings do 
    resources :users, shallow: true 
end 

Учитывая встречу, я могу получить доступ пользователей через/заседаний/1 #, но не/meeting/1/users. Почему это?

Update с большей информацией:

У меня есть это, когда работают рейк ресурсы:

meeting_users GET /meetings/:meeting_id/users(.:format) users#index 
POST     /meetings/:meeting_id/users(.:format) users#create 

ошибка я получил от доступа/встреч/1/пользователей от контроллера пользователей:

ActionController::UnknownFormat 

В контроллере пользователей:

def index 
    @users = User.where(meeting: @meeting) 
    respond_to do |format| 
    format.json 
    end 
end 

Точки ошибки на respond_to do |format| линии

+0

Что он говорит вам, когда вы пытаетесь получить доступ к '/ meeting/1/users'? Можете ли вы показать действие индекса users_controller? –

+0

Я даже не понимаю, почему вы можете получить к нему доступ * без * использования фактического пути. Вы уверены, что что-то не используется в интерфейсе, который использует ссылки в стиле SPA? –

+0

Кроме того, в терминале, если вы запускаете рейк-задачу 'rake routes', что она вам дает? (я чувствую, что маршрут должен быть определен) –

ответ

0

С вашей данной информации маршрутов, вы должны иметь маршрут, как это: (bundle exec rake routes):

meeting_users GET /meetings/:meeting_id/users(.:format)  users#index 

Таким образом, вы должны быть в состоянии получить доступ к /meetings/1/users который будет отправлен users_controller в действии index и доставит вас до соответствующего вида index.

0

Чтобы добавить к ответу @KM Rakibul ислама, вы можете получить доступ к ссылке, предваряя имя пути каждого ресурса перед суффиксом _path, и переходя в этом совещании, например, так:

<%= link_to "View users for this meeting", meeting_users_path(@meeting) %> 

You должен иметь один конкретный объект @meeting, определенный в вашем контроллере, такой как @meeting = Meeting.find(params[:id]) или что бы вы ни искали на встрече.

Также следует отметить, что при использовании shallow: true на находчивом маршруте он генерирует только вложенные маршруты для [:index, :new, :create], а не для [:show, :update, :edit, :destroy]. К последнему нужно будет обращаться без префикса meeting_.

# Since using shallow, these would need the meeting prefix 
meeting_users GET /meetings/:meeting_id/users(.:format)  users#index 
new_meeting_user GET /meetings/:meeting_id/users/new(.:format) users#new 
meeting_users POST /meetings/:meeting_id/users(.:format)  users#create 

# These would not need the meeting prefix 
edit_user  GET /users/:id/edit       users#edit 
user    GET /users/:id        users#show 
user    PATCH /users/:id        users#update 
user    PUT /users/:id        users#update 
user    DELETE /users/:id        users#destroy 
Смежные вопросы