📜  Ruby on Rails 2.1-控制器(1)

📅  最后修改于: 2023-12-03 14:47:08.682000             🧑  作者: Mango

Ruby on Rails 2.1-控制器

在Ruby on Rails中,控制器是应用程序的一部分,用于控制Web应用的请求和响应。控制器充当MVC框架中的C(控制器),将模型和视图连接在一起,并生成响应返回给用户。

控制器的作用

控制器的目的是响应请求并生成响应。当用户访问Web应用程序时,控制器接收请求,并根据请求调用相应的操作。操作从模型中获取数据,并使用视图将数据呈现给用户。

控制器的结构

Ruby on Rails中的控制器是一个类,可以放在名为controllers/的目录中。控制器应该包括以下方法:

  1. index – 显示应用程序中所有资源的列表
  2. new – 创建新的资源
  3. show – 显示特定资源的详细信息
  4. edit – 编辑特定资源的详细信息
  5. create – 创建新的资源
  6. update – 更新现有资源的详细信息
  7. destroy – 删除现有的资源

以下是一个简单的控制器类的示例:

class UsersController < ApplicationController
  def index
    @users = User.all
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to users_path
    else
      render :new
    end
  end

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

  def update
    @user = User.find(params[:id])
    if @user.update(user_params)
      redirect_to users_path
    else
      render :edit
    end
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy
    redirect_to users_path
  end

  private

  def user_params
    params.require(:user).permit(:name, :email, :password)
  end
end
处理请求和生成响应

在控制器类中,你可以定义许多方法来响应HTTP请求,并使用视图生成响应。以下是一个简单的控制器类来响应HTTP请求的示例:

class GreetingsController < ApplicationController
  def hello
    @name = params[:name] || 'World'
    render 'hello'
  end

  def goodbye
    @name = params[:name] || 'World'
    render 'goodbye'
  end
end

在上述示例中,我们定义了两个方法,hellogoodbye。每个方法都渲染与方法同名的视图hello.html.erbgoodbye.html.erb。在视图中,我们可以访问实例变量@name,这些变量可以从请求参数中获取。

路由

为了让控制器响应HTTP请求,我们需要在应用程序中定义路由。路由是一个URL模式和一个控制器动作的匹配项。以下是一个配置路由的示例:

Rails.application.routes.draw do
  get 'greetings/hello'
  get 'greetings/goodbye'
end

在上述示例中,我们使用get方法来匹配URL模式,并指定相应的控制器动作。当用户访问/greetings/hello时,将调用GreetingsController类的hello方法。

总结

控制器是Ruby on Rails应用程序的重要组成部分,因为它们将模型和视图连接在一起,并生成响应返回给用户。控制器的结构包括用于响应HTTP请求的动作,并从模型获取数据,使用视图呈现数据。定义路由是将URL模式与控制器动作匹配的关键,以便正确响应HTTP请求。