我之前创建了User/Show Page
执行以下步骤:
路线:
# User Profile
get "users/show"
get 'user/:id' => 'users#show', as: :user
并在我的 users_controller:
中def show
@user = User.find_by_user_name(params[:id]) # For Name instead of ID
end
现在我创建了
Albums Scaffold
我想做同样的事情:
路线:
# User Albums
get "users/albums"
get 'user/:id/albums' => 'users#albums'
并添加到我的 users_controller:
def albums
@user = User.find_by_user_name(params[:id]) # For Name instead of ID
@albums = @user.albums
end
在rake路线上,我得到以下
users_show GET /users/show(.:format) users#show user GET /user/:id(.:format) users#show users_albums GET /users/albums(.:format) users#albums GET /user/:id/albums(.:format) users#albums
首先这是一个很好的做法吗?第二次它不起作用:)
如果我尝试直接访问:
http://localhost:3000/user/username/albums
它有效。
答案 0 :(得分:2)
我完全赞同你应该为你的路线使用资源的其他海报。然而,您遇到麻烦似乎是用设计描述您的路线。
举个例子,你的路线应该是这样的:
devise_for :users
devise_scope :user do
resources :albums
end
devise docs在“配置路由”下简要地使用devise_scope。
答案 1 :(得分:0)
您可以使用RESTful声明:
resources :users do
member do
get 'albums'
end
end
这将为用户创建所有RESTful路由,并在UsersController(albums_path)中创建相册方法的路径。
如果您正在尝试创建我将使用的关系:
resources :users do
resources :albums
end
答案 2 :(得分:0)
这不是一个好习惯。资源更好。
由于Album也是一种资源,您可以使用嵌套资源。
resources :user do
resources :albums
end