掌握 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
-
打开模型文件(如
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
-
使用 RadRails 生成器视图创建名为
Foot的模型,Rails 会生成一个名为001_create_feet.rb的迁移文件来创建名为feet的表。 -
按常规步骤迁移
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>© 2006 My Company
-
双击项目
app\controllers分支中的things_controller.rb文件,在文件顶部附近添加对 Railslayout方法的调用,示例代码如下:
class ThingsController < ApplicationController
layout "alternative"
# Etc. ...
- 像运行其他 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' %>
-
访问
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 开发,在实际项目中灵活运用各种技巧和方法。
超级会员免费看
12

被折叠的 条评论
为什么被折叠?



