22、掌握 Rails 开发:十大默认值覆盖技巧

掌握 Rails 开发:十大默认值覆盖技巧

在 Rails 开发中,有时我们需要对默认设置进行调整,以满足特定的项目需求。以下将为你详细介绍十种覆盖 Rails 默认值的方法。

1. 不使用生成器视图创建脚手架

通常我们可以不使用 Rails 生成器视图来创建脚手架,而是在控制器代码中添加对 Rails 脚手架方法的调用。创建完成后,访问 http://localhost:300x/thing ,注意这里使用的是单数形式。

2. 覆盖控制器名称

覆盖控制器名称并不复杂,只需在创建完整的 Rails 项目时做两个小改动:
1. 使用生成器视图创建脚手架时,在右侧文本字段中输入两个单词,先输入模型名称,再输入控制器名称。点击生成器视图的“Go”按钮后,RadRails 会创建常规的脚手架代码,同时生成一个名为 some_other_name_controller.rb 的控制器文件,该文件定义了 SomeOtherNameController 类。
2. 打开 Web 浏览器,访问 http://localhost:300x/some_other_name

3. 覆盖表主键名称

若想让数据库表的主键名称不是 Rails 默认的 id ,可按以下步骤操作:
1. 在 RadRails 编辑器中,为项目的迁移文件添加 primary_key 选项,示例代码如下:

class CreateThings < ActiveRecord::Migration
  def self.up
    create_table :things,
      :primary_key => 'legacy_key_name' do |t|
      t.column :name, :string
    end
  end

  def self.down
    drop_table :things
  end
end
  1. 打开模型文件(如 app\models\thing.rb ),在编辑器中为模型添加 set_primary_key 调用,示例代码如下:
class Thing < ActiveRecord::Base
  set_primary_key 'legacy_key_name'

  def legacy_key_name_before_type_cast
  end
end

当访问应用的“New Thing”页面时,会看到一个通常不会出现的文本字段。默认情况下,数据库会自动递增主键的值,该操作会覆盖你在“Legacy Key Name”字段中输入的任何值。若想去掉这个无用的字段,可打开项目的 app\views\things\_form.rhtml 文件,删除创建 legacy_key_name 标签和文本字段的两行代码。

4. 使用单数名词

在创建新的 Rails 项目时,若选择“Disable Table Pluralization”选项,RadRails 会在项目的 config\environment.rb 文件中添加一行代码:

ActiveRecord::Base.pluralize_table_names = false

这会使表名与模型名相同(仅大小写有差异)。之后创建迁移时,生成的文件将包含单数表名,示例代码如下:

class CreateThings < ActiveRecord::Migration
  def self.up
    create_table :thing do |t|
      t.column :name, :string
    end
  end

  def self.down
    drop_table :thing
  end
end

后续项目开发与常规操作类似,但由于数据库表名是单数,需访问 http://localhost:300x/thing 来使用项目的 Web 页面。

5. 创建不规则复数

Rails 在创建复数名词时通常很智能,但也有例外。例如,创建名为 Foot 的模型时,Rails 会错误地将表名设为 foots 。为避免此问题,可按以下步骤操作:
1. 开始创建新的 Rails 项目,在创建模型前停止。
2. 使用 MySQL 为项目创建数据库。
3. 双击项目配置分支中的 environment.rb 文件,该文件会在 RadRails 编辑器中打开,其中包含许多注释行。
4. 在编辑器中,取消注释 Inflector.inflections do |inflect| 及其对应的 end 行,然后输入 inflect.irregular 行,示例代码如下:

Inflector.inflections do |inflect|
  #   inflect.plural /^(ox)$/i, '\1en'
  #   inflect.singular /^(ox)en/i, '\1'
  #   inflect.irregular 'person', 'people'
  inflect.irregular 'foot', 'feet'
  #   inflect.uncountable %w( fish sheep )
end
  1. 使用 RadRails 生成器视图创建名为 Foot 的模型,Rails 会生成一个名为 001_create_feet.rb 的迁移文件来创建名为 feet 的表。
  2. 按常规步骤迁移 feet 表,生成 Foot 脚手架等。访问项目的 Web 站点时,在 Web 浏览器的地址栏中输入 http://localhost:300x/feet

不过,此方法并非总是有效。例如,添加 inflect.irregular 'mother_in_law', 'mothers_in_law' 后,生成 Mother_in_law 模型时,迁移文件开头可能会出现错误,需要手动编辑第一行代码。

6. 覆盖默认布局

默认情况下,布局名称与模型的复数名称相同。但我们可以使用不同的布局,且无需重命名原布局文件。具体步骤如下:
1. 创建一个 Rails 项目。
2. 在 Rails 导航器视图中,右键单击项目的 app\views\layouts 分支,在弹出的上下文菜单中选择“New” -> “File”。
3. 在“New File”对话框的“File Name”字段中输入 alternative.rhtml (或其他名称),然后按回车键,会在 RadRails 工作台中央打开一个空白编辑器。
4. 在编辑器中输入替代布局的代码,示例如下:

<h3>Look! I created an alternative layout!</h3>
<%= yield  %>
<p>&copy; 2006 My Company
  1. 双击项目 app\controllers 分支中的 things_controller.rb 文件,在文件顶部附近添加对 Rails layout 方法的调用,示例代码如下:
class ThingsController < ApplicationController
  layout "alternative"
  # Etc. ...
  1. 像运行其他 Rails 应用一样运行该应用,应用的每个页面都会使用替代布局。
7. 创建额外的 Web 页面

我们可以为每个模型创建不同的欢迎页面,以 Thing 模型为例,步骤如下:
1. 在 Rails 导航器视图中,右键单击项目的 app\views\things 分支,在弹出的上下文菜单中选择“New” -> “File”。
2. 在“New File”对话框的“File Name”字段中输入 index.rhtml ,然后按回车键,会在 RadRails 工作台中央打开一个空白编辑器。
3. 在编辑器中输入新欢迎页面的代码,示例如下:

<h1>Main Menu</h1>
<%= link_to 'List', :action => 'list' %> |
<%= link_to 'New', :action => 'new' %>
  1. 访问 http://localhost:300x/things ,Web 浏览器将显示类似的页面。

除了欢迎页面,还可以为特定模型添加多个页面。例如,创建一个帮助页面,只需在项目的 app\views\things 目录中添加一个 help.rhtml 文件,然后访问 http://localhost:300x/things/help 即可查看该页面。

8. 修改 URL 的含义

通常,我们通过输入 http://localhost:300x/things 来访问应用的“Listing Things”页面。但有时我们可能需要更改该页面或其他页面的 URL,可按以下步骤操作:
1. 双击项目配置分支中的 routes.rb 文件,该文件会在 RadRails 编辑器中打开。
2. 在编辑器中添加对 Rails connect 方法的调用,示例代码如下:

ActionController::Routing::Routes.draw do |map|
  map.connect 'things', :controller => 'things', 
    :action => 'new'
  # Etc. ...

这会使服务器在用户在浏览器地址栏中输入 http://localhost:300x/things 时,响应 things 控制器的 new 页面。

若想避免输入 things 这个额外的单词,可再添加一个 connect 方法的调用,示例代码如下:

ActionController::Routing::Routes.draw do |map|
  map.connect '', :controller => 'things'
  # Etc. ...

这样,访问 http://localhost:300x 时,服务器将响应“Listing Things”页面。

9. 更改服务器环境

新的 Rails 项目默认在开发模式下运行,我们可以将其更改为其他模式,步骤如下:
1. 开始创建新的 Rails 项目和模型,在创建数据库前停止。
2. 使用 MySQL 管理员创建一个名为 something_production 的数据库。
3. 在 RadRails 服务器视图中,选择步骤 1 中创建的项目所属的服务器,然后点击服务器视图的“Edit”按钮,会弹出一个小的“Server Properties”对话框。
4. 在对话框的“Environment”下拉列表中选择“Production”,然后点击“OK”。
5. 执行数据库迁移,在 Rake 任务视图右侧的文本字段中输入 RAILS_ENV=production
6. 在 RadRails 生成器视图中,生成一个 Thing 控制器。
7. 双击项目 app\controllers 分支中的 thing_controller.rb 文件,在编辑器中为控制器添加一行代码。
8. 访问 http://localhost:300x/thing (注意是单数形式),应用将正常运行。

总结

通过以上十种方法,我们可以在 Rails 开发中灵活地覆盖默认设置,满足各种特定的项目需求。无论是控制器名称、表主键名称、布局,还是 URL 含义和服务器环境,都可以根据实际情况进行调整。希望这些技巧能帮助你更好地进行 Rails 开发。

以下是一个简单的流程图,展示了更改服务器环境的主要步骤:

graph LR
    A[开始创建新的 Rails 项目和模型] --> B[停止创建数据库]
    B --> C[使用 MySQL 管理员创建生产数据库]
    C --> D[在 RadRails 服务器视图中选择服务器并点击 Edit 按钮]
    D --> E[在对话框中选择 Production 环境并点击 OK]
    E --> F[执行数据库迁移,输入 RAILS_ENV=production]
    F --> G[在 RadRails 生成器视图中生成 Thing 控制器]
    G --> H[编辑 thing_controller.rb 文件]
    H --> I[访问 http://localhost:300x/thing]

此外,还可以通过表格总结不同覆盖方法的主要操作和注意事项:
| 覆盖方法 | 主要操作 | 注意事项 |
| ---- | ---- | ---- |
| 覆盖控制器名称 | 在生成器视图输入模型名和控制器名,访问特定 URL | - |
| 覆盖表主键名称 | 修改迁移文件和模型文件 | 可能需要删除无用字段 |
| 使用单数名词 | 选择“Disable Table Pluralization”选项 | 访问单数形式的 URL |
| 创建不规则复数 | 编辑 environment.rb 文件 | 可能需要手动编辑迁移文件 |
| 覆盖默认布局 | 创建新布局文件,修改控制器代码 | - |
| 创建额外的 Web 页面 | 创建新的 .rhtml 文件并输入代码 | - |
| 修改 URL 的含义 | 编辑 routes.rb 文件 | - |
| 更改服务器环境 | 创建生产数据库,选择生产环境,执行迁移等 | 注意输入 RAILS_ENV=production |

掌握 Rails 开发:十大默认值覆盖技巧

10. 其他重要的 Rails 开发知识补充

在 Rails 开发中,除了前面提到的覆盖默认值的方法,还有许多其他重要的知识和技巧。下面将为大家介绍一些常见的概念和操作。

10.1 数据库操作

数据库是 Rails 应用的核心组成部分,常见的数据库操作包括创建、读取、更新和删除(CRUD)。以下是一些基本的数据库操作代码示例:

# 创建记录
Thing.create(name: 'example')

# 读取记录
things = Thing.all
specific_thing = Thing.find(1)

# 更新记录
thing = Thing.find(1)
thing.name = 'new name'
thing.save

# 删除记录
thing = Thing.find(1)
thing.destroy

同时,在数据库迁移方面,我们可以使用 Rails 的迁移库来管理数据库结构的变化。例如,创建一个新的表:

class CreateThings < ActiveRecord::Migration
  def self.up
    create_table :things do |t|
      t.string :name
      t.timestamps
    end
  end

  def self.down
    drop_table :things
  end
end
10.2 控制器与视图交互

控制器负责处理用户请求,并将数据传递给视图进行展示。以下是一个简单的控制器和视图交互的示例:

控制器代码( things_controller.rb

class ThingsController < ApplicationController
  def index
    @things = Thing.all
  end
end

视图代码( index.html.erb

<h1>Things List</h1>
<ul>
  <% @things.each do |thing| %>
    <li><%= thing.name %></li>
  <% end %>
</ul>

在这个示例中,控制器的 index 方法将所有的 Thing 记录存储在实例变量 @things 中,然后在视图中通过 ERb 标签遍历并展示这些记录。

10.3 表单处理

在 Rails 中,表单是用户与应用交互的重要方式。以下是一个简单的表单示例,用于创建新的 Thing 记录:

<%= form_for(@thing) do |f| %>
  <p>
    <%= f.label :name %>
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>

这个表单使用 form_for 方法创建一个表单,用户可以在文本框中输入 Thing 的名称,然后点击提交按钮将数据发送到服务器。

总结与展望

通过本文的介绍,我们学习了十种覆盖 Rails 默认值的方法,包括不使用生成器视图创建脚手架、覆盖控制器名称、修改表主键名称等。同时,还补充了数据库操作、控制器与视图交互以及表单处理等重要的 Rails 开发知识。

在实际的 Rails 开发中,这些技巧和知识将帮助我们更加灵活地构建应用,满足各种复杂的业务需求。未来,随着 Rails 框架的不断发展,我们还可以探索更多高级的功能和优化方法,进一步提升应用的性能和用户体验。

以下是一个简单的流程图,展示了控制器与视图交互的主要流程:

graph LR
    A[用户请求] --> B[控制器处理请求]
    B --> C[控制器获取数据]
    C --> D[控制器将数据传递给视图]
    D --> E[视图展示数据]
    E --> F[响应返回给用户]

另外,我们可以通过表格总结不同数据库操作的代码示例和功能:
| 操作类型 | 代码示例 | 功能描述 |
| ---- | ---- | ---- |
| 创建记录 | Thing.create(name: 'example') | 在 Thing 表中创建一条新记录 |
| 读取记录 | Thing.all Thing.find(1) | 获取所有记录或根据 ID 获取特定记录 |
| 更新记录 | thing = Thing.find(1); thing.name = 'new name'; thing.save | 更新指定记录的属性 |
| 删除记录 | thing = Thing.find(1); thing.destroy | 删除指定记录 |

希望这些内容能够帮助大家更好地掌握 Rails 开发,在实际项目中灵活运用各种技巧和方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值