使用Devise创建`Users`显示页面

ste*_*392 45 ruby-on-rails show devise

我正在尝试创建一个用户show页面(将用作个人资料页面)但我对如何使用Devise这样做感到困惑.似乎Devise没有任何类型的show定义 - 有没有什么方法可以访问Devise正在实现的控制器,以便制作一个或者我必须覆盖它们?

Ser*_*nin 72

您应该生成一个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]
Run Code Online (Sandbox Code Playgroud)


Ash*_*aka 36

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

#routes.rb
devise_for :users
resources :users, :only => [:show]
Run Code Online (Sandbox Code Playgroud)

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

#routes.rb
devise_for :users, :path_prefix => 'd'
resources :users, :only => [:show]
Run Code Online (Sandbox Code Playgroud)


Man*_*lla 17

使用设计显示current_user/other_user配置文件:

安装完设计后

创建用户控制器:

rails generate controller Users
Run Code Online (Sandbox Code Playgroud)

然后创建一个show动作并找到具有params id的用户:

def show
@user = User.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

在用户视图文件夹中创建show.html.erb文件:

<%= @user.email %>
Run Code Online (Sandbox Code Playgroud)

链接到用户显示页面:

<%= link_to "current_user_show", current_user %>
Run Code Online (Sandbox Code Playgroud)

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

def index @users = User.all end
Run Code Online (Sandbox Code Playgroud)

在用户视图文件夹中创建index.html.erb,然后:

<% @users.each do |user| %>
<%= link_to user.username, user %>
<%= user.email %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这个链接将是:

<%= link_to "show_index_of_users", users_path %>
Run Code Online (Sandbox Code Playgroud)

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

<% @users.each do |user| %>
<%= link_to user.username, user %>
<%= user.email %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这应该工作!

  • 是 - 定义需要按照接受的答案中的说明配置路由。资源:用户,仅:[:show] (2认同)