侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

在Rails中如何定义一个展示用户详情的路由和控制器?

2025-12-12 / 0 评论 / 4 阅读

题目

在Rails中如何定义一个展示用户详情的路由和控制器?

信息

  • 类型:问答
  • 难度:⭐

考点

路由定义,控制器基础,HTTP动词

快速回答

实现用户详情页需要:

  1. config/routes.rb中添加资源路由:resources :users, only: [:show]
  2. 创建控制器文件app/controllers/users_controller.rb
  3. 在控制器中定义show方法:
    def show
      @user = User.find(params[:id])
    end
  4. 创建视图文件app/views/users/show.html.erb
## 解析

原理说明

Rails遵循MVC架构和RESTful设计原则。当访问/users/1时:

  1. 路由器根据HTTP GET请求匹配show动作
  2. 控制器通过params[:id]获取用户ID
  3. 模型查询数据库返回用户记录
  4. 渲染同名视图展示数据

代码示例

1. 路由配置(config/routes.rb)

Rails.application.routes.draw do
  resources :users, only: [:show]
end

生成路由:GET /users/:id → users#show

2. 控制器实现(app/controllers/users_controller.rb)

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

3. 视图文件(app/views/users/show.html.erb)

<h1>User Profile</h1>
<p>Name: <%= @user.name %></p>
<p>Email: <%= @user.email %></p>

最佳实践

  • 使用only限定路由避免生成多余路径
  • 控制器中处理异常:
    def show
      @user = User.find_by(id: params[:id])
      redirect_to root_path, alert: 'User not found' unless @user
    end
  • 遵循约定:控制器名复数(UsersController),视图目录名复数(users)

常见错误

  • 路由拼写错误(如resouces代替resources
  • 忘记创建视图文件导致Template missing错误
  • 控制器方法名错误(如shows代替show
  • 未处理ActiveRecord::RecordNotFound异常

扩展知识

  • 路由助手user_path(@user)生成路径/users/1
  • RESTful动作show对应HTTP GET请求
  • 强参数:写入操作需使用params.require(:user).permit(:name, :email)
  • 资源路由:完整resources :users生成7个标准路由