我继承了这个应用程序(Rails 4.2.3,Ruby 2.2.2),并且有一些嵌套资源定义为:
resources :meetings do
resources :users, shallow: true
end
鉴于会议,我可以通过/ meetings / 1#用户访问用户,但不能访问/ meetings / 1 / users。那是为什么?
更新并提供更多信息:
运行rake资源时我确实有这个:
meeting_users GET /meetings/:meeting_id/users(.:format) users#index
POST /meetings/:meeting_id/users(.:format) users#create
我从access / meetings / 1 / users获得的错误来自用户控制器:
ActionController::UnknownFormat
在用户控制器中:
def index
@users = User.where(meeting: @meeting)
respond_to do |format|
format.json
end
end
错误指向respond_to do |format|
行
答案 0 :(得分:0)
根据您提供的路线信息,您应该有这样的路线:(bundle exec rake routes
):
meeting_users GET /meetings/:meeting_id/users(.:format) users#index
因此,您应该能够访问由/meetings/1/users
的{{1}}操作提供的users_controller
,并转到相应的index
视图。
答案 1 :(得分:0)
要添加@K M Rakibul Islam的答案,您可以通过在_path
后缀前面添加每个资源的路径名称并传入会议对象来访问该链接,如下所示:
<%= link_to "View users for this meeting", meeting_users_path(@meeting) %>
您必须在控制器中定义一个特定的@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