ruby on rails-使用Devis创建`Users`显示页面

我正在尝试创建一个用户show页面(该页面将用作个人资料页面),但对于如何使用Devise进行操作感到困惑。 似乎Devise并未附带任何类型的show定义-我可以通过任何方式访问Devise正在实现的控制器以创建一个控制器,还是必须重写它们?

steffi2392 asked 2020-07-13T15:35:26Z
4个解决方案
72 votes

您应该生成一个users_controller,该继承自application_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]
Sergey Kishenin answered 2020-07-13T15:35:42Z
36 votes

不要忘记,您的用户路由应位于devise_for用户路由之下,如下所示:

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

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

#routes.rb
devise_for :users, :path_prefix => 'd'
resources :users, :only => [:show]
Ashitaka answered 2020-07-13T15:36:07Z
17 votes

显示带有设计的current_user / other_user配置文件:

安装devise之后

创建一个用户控制器:

rails generate controller Users

然后创建一个show action并找到具有params 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 %>

这应该工作!

Manny Quintanilla answered 2020-07-13T15:37:10Z
-11 votes

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

 rails g devise:views
Kleber S. answered 2020-07-13T15:37:30Z
translate from https://stackoverflow.com:/questions/7086583/creating-a-users-show-page-using-devise