Ruby on rails 为控制器操作创建一个页面

Ruby on rails 为控制器操作创建一个页面,ruby-on-rails,controller,routes,ruby-on-rails-4,Ruby On Rails,Controller,Routes,Ruby On Rails 4,我之前创建了一个User/Show页面,执行以下步骤: 路线: # User Profile get "users/show" get 'user/:id' => 'users#show', as: :user def show @user = User.find_by_user_name(params[:id]) # For Name instead of ID end # User Albums get "users/albums" get 'user/:id

我之前创建了一个
User/Show页面
,执行以下步骤:

路线:

# User Profile
  get "users/show"
  get 'user/:id' => 'users#show', as: :user
def show
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
end
# User Albums
  get "users/albums"
  get 'user/:id/albums' => 'users#albums'
def albums
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
  @albums = @user.albums
end
在我的用户\u控制器中:

# User Profile
  get "users/show"
  get 'user/:id' => 'users#show', as: :user
def show
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
end
# User Albums
  get "users/albums"
  get 'user/:id/albums' => 'users#albums'
def albums
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
  @albums = @user.albums
end
现在我创建了一个
相册支架
,我也想这样做:

# User Profile
  get "users/show"
  get 'user/:id' => 'users#show', as: :user
def show
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
end
# User Albums
  get "users/albums"
  get 'user/:id/albums' => 'users#albums'
def albums
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
  @albums = @user.albums
end
路线:

# User Profile
  get "users/show"
  get 'user/:id' => 'users#show', as: :user
def show
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
end
# User Albums
  get "users/albums"
  get 'user/:id/albums' => 'users#albums'
def albums
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
  @albums = @user.albums
end
并添加到我的用户\u控制器:

# User Profile
  get "users/show"
  get 'user/:id' => 'users#show', as: :user
def show
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
end
# User Albums
  get "users/albums"
  get 'user/:id/albums' => 'users#albums'
def albums
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
  @albums = @user.albums
end
在rake路线上,我得到以下信息

首先这是一种好的做法吗?其次它不起作用:)

如果我尝试直接访问:

http://localhost:3000/user/username/albums

它可以工作。

您可以使用RESTful声明:

resources :users do
    member do
        get 'albums'
    end
end
这将为用户创建所有RESTful路由,并在UsersController中创建albums方法的路径(albums\u路径)

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

resources :users do
    resources :albums
end

这不是一个好的做法。资源更好

因为相册也是一种资源,所以可以使用嵌套资源

resources :user do
  resources :albums
end

我完全同意其他的海报,你应该使用你的路线资源。然而,似乎你遇到的麻烦是用Desive描述你的路线

举个例子,您的路线应该如下所示:

devise_for :users
  devise_scope :user do
    resources :albums
  end

在“配置路由”下简要提及使用Desive_scope。为什么有4条路由指向2个操作?在每个场景中,您试图实现什么?我认为这不是一个好的做法,因为我看不懂你想要实现什么。我试图通过url localhost:300/user/username/albums显示这个用户的相册,
/users/albums
那么做什么呢?为什么会出现?我正在执行与用户显示页面设置相同的步骤。我是rails的新手,请原谅。如果你有解决方案,你介意回答吗。我已经为:用户设计了,但不能耙路:/这是问题吗?我已经为:用户设计了,但它不允许我耙路/我让你的第一个密码生效了。在我的路线中,我现在有->。。你可以看到相册的第二条路径是如何指向用户#索引并缺少所需的键的:因为相册是一种资源,所以需要将其描述为一种资源。第一个代码仅为用户创建一个操作(相册)。第二个代码段为关系创建路由(在您应该拥有的模型中,属于:user(对于user.rb)和拥有:Album(对于Album.rb)。模型设置正确,我只是找不到在我的路线中描述它的正确方法。你还应该有一个相册控制器。正确设置关系后,你应该能够执行用户/albums/:id/:album_id,第一个id是用户id。在你的用户控制器中使用相册作为一种方法是不可行的,所以资源的rt。