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。