2011-08-17 26 views
39

我试图创建一个用户show页面(它将用作配置文件页面),但对如何使用Devise执行此操作感到困惑。它似乎并没有像Devise带有任何形式的show定义 - 有没有什么办法可以访问控制器Devise为了使其中一个或者我必须覆盖它们而实现的控制器?使用Devise创建`Users`显示页面

回答

62

你应该产生一个users_controllerapplication_controller继承和定义有您的自定义show方法。不要忘记为它创建一个视图和路线。 例如:

#users_controller.rb 
def show 
    @user = User.find(params[:id]) 
end 

#in your view 
<%= @user.name %> 

#routes.rb 
match 'users/:id' => 'users#show', via: :get 
# or 
get 'users/:id' => 'users#show' 
# or 
resources :users, only: [:show] 
+0

所以我已经完成了所有这些,我只是将'show'改成了'index',它使得'@users = Users.all'但我得到这个错误:未初始化的常量UsersController :: Users。 发现我的错误,应该是'@users = @ User.all' – tcatchy

+0

一旦我这样做了,我如何链接到特定的用户配置文件,并且可以在不登录的情况下打开/访问它?谢谢! – westman2222

+0

上面的代码会使用户显示(配置文件)页面无需登录即可访问 –

-11

您可以生成devise使用的视图,因此您可以根据需要进行更改。

rails g devise:views 
+4

但用户仍然没有显示页面。只有新的和编辑页面。 –

+1

不好的答案,先看看这个问题,看来oyu还没有用 – SsouLlesS

+0

'rails g devise:views'生成新的和编辑的视图。没有显示页面。尝试代码并查看您的路线,没有显示。 –

32

不要忘了你的用户的路线应该是devise_for用户线路下方,就像这样:

#routes.rb 
devise_for :users 
resources :users, :only => [:show] 

此外,如果您使用的是用户名或电子邮件作为主要的键而不是通常的ID,你应该避免路由冲突通过声明你的路线如下:

#routes.rb 
devise_for :users, :path_prefix => 'd' 
resources :users, :only => [:show] 
8

显示CURRENT_USER/other_user型材色器件:

After installing devise

创建用户控制:

rails generate controller Users 

然后创建一个表演动作,并找到使用参数ID的用户:

def show 
@user = User.find(params[:id]) 
end 

创建在用户show.html.erb文件查看文件夹:

<%= @user.email %> 

链接到用户显示页面:

<%= link_to "current_user_show", current_user %> 

现在如果你想查看其他配置文件创建在用户控制器中的索引操作:

def index @users = User.all end 

创建在用户查看文件夹的index.html.erb则:

<% @users.each do |user| %> 
<%= link_to user.username, user %> 
<%= user.email %> 
<% end %> 

的链接,这将是:

<%= link_to "show_index_of_users", users_path %> 

这将您链接到用户index.html.erb文件中有您将创建循环,并链接到用户配置文件:

<% @users.each do |user| %> 
<%= link_to user.username, user %> 
<%= user.email %> 
<% end %> 

这应该工作!

+0

无需配置/路由? –

相关问题