题目
在Rails中如何定义一个展示用户详情的路由和控制器?
信息
- 类型:问答
- 难度:⭐
考点
路由定义,控制器基础,HTTP动词
快速回答
实现用户详情页需要:
- 在
config/routes.rb中添加资源路由:resources :users, only: [:show] - 创建控制器文件
app/controllers/users_controller.rb - 在控制器中定义
show方法:def show @user = User.find(params[:id]) end - 创建视图文件
app/views/users/show.html.erb
原理说明
Rails遵循MVC架构和RESTful设计原则。当访问/users/1时:
- 路由器根据HTTP GET请求匹配
show动作 - 控制器通过
params[:id]获取用户ID - 模型查询数据库返回用户记录
- 渲染同名视图展示数据
代码示例
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
end3. 视图文件(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个标准路由