-1

我之前创建了一个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

有用。

4

3 回答 3

2

我完全同意其他海报的观点,即您应该为您的路线使用资源。但是,您似乎遇到的问题是用设计来描述您的路线。

举个例子,你的路线应该是这样的:

devise_for :users
  devise_scope :user do
    resources :albums
  end

设计文档在“配置路由”下简要提到了使用 devise_scope。

于 2013-09-23T07:39:18.440 回答
0

这不是一个好习惯。资源更好。

由于相册也是资源,所以可以使用嵌套资源。

resources :user do
  resources :albums
end
于 2013-09-20T20:01:55.373 回答
0

您可以使用 RESTful 声明:

resources :users do
    member do
        get 'albums'
    end
end

这将为用户创建所有 RESTful 路由,并在 UsersController (albums_path) 中创建到相册方法的路径。

如果您尝试建立关系,我会使用:

resources :users do
    resources :albums
end
于 2013-09-20T20:01:03.083 回答