千家信息网

Ruby on rails的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下Ruby on rails的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!体验一中添加了一个最基
千家信息网最后更新 2026年11月01日Ruby on rails的示例分析

小编给大家分享一下Ruby on rails的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

体验一中添加了一个最基本的支架和一个简单的数据迁移,实现了一个基本的增删改查的功能列表。体验二中要在次功能上继续丰满一下功能。实现如下效果:

在每个公司中都包含有不同的部门,按照体验一中的方法,添加一个部门的支架,一个数据迁移。实现部门的增删改查功能。部门的数据结果如下:

具体方式省略。

简单创建了支架而没有定制应用,它将难以使用,为了给一个公司添加部门,将会边的很麻烦。我们把我们希望的页面和支架生成的部门的页面比较一下:

Cid和Chargeuserid先不用做关联,手添即可,只是为了能够重新组织页面。

部门列表和创建部门的页面看起来和我们想要的页面上出现的内容非常相似,目标页面中间部分看起来像是作为列表,而末尾像创建部门页面。

接下来是今天要整理的内容:把一个页面的内容分解到几个文件里。

首先要理解三个概念:

(1) 布局:为一系列网页设定统一的外观,大多数会提供出现在每个页面顶部和底部的标准的HTML元素。

(2) 模板:模版是页面的主要内容,模版与动作相关联。

(3) 局部模板:一个模版会调用多个不同的局部模版来建立页面的主要内容,局部模版允许把一个复杂模版分解为多个更小的部分,允许把公共的内容分离出来,比如菜单和导航栏,局部模版可以被模版使用,它也可以被布局直接使用。

布局、模版、局部模板这三种嵌入式Ruby(ERB)文件组成一个网页。

创建添加部门表单的局部模板:

局部模板只是另外一种ERB文件,它包含着与模板相同的标签类型。此时的项目的views结构如下图:

通过拷贝app/views/departments/new.html并且另存为app/views/companies/_new_department.html.erb来创建局部模板。一个重要的事情就是局部模板以字符_开始,Rails通过字符_来区分页面模板和局部模板。

在模版中包含局部模版:

我们要在company的show.html.erb页面模版来把创建的局部模版包含在它的输出里,局部模板和模板一样,仅仅只是一段伪装成HTML样子的Ruby代码,通过一个render命令到company的页面中:

现在局部模板应该已经添加到company的页面中了,让我们看一下show.html.erb Company页面查看信息是否现实正确。现实内容如下:

感觉好奇怪,我们看一下app/views/departments/new.html、app/views/companies/_new_department.html.erb文件中的内容:

1 

New department

2 3 <%= render 'form' %> 4 5 <%= link_to 'Back', departments_path %>

看来问题出现在<%= render 'form' %>这个地方,这里是页面直接跳转到_form.html.erb页面。所以就会出现如上页面现实的问题。

下面将app/views/companies/_new_department.html.erb改为如下内容(从app/views/departments/_form.html.erb将里面的内容复制出来的信息,因为添加部门的页面同样是直接跳转到此页面)避免冲突问题:

 1 <%= form_for(@department) do |f| %>   2   <% if @department.errors.any? %>   3     
4

<%= pluralize(@department.errors.count, "error") %> prohibited this department from being saved:

5 6
    7 <% @department.errors.full_messages.each do |msg| %> 8
  • <%= msg %>
  • 9 <% end %> 10
11
12 <% end %> 13 14
15 <%= f.label :name %>
16 <%= f.text_field :name %> 17
18
19 <%= f.label :cid %>
20 <%= f.text_field :cid %> 21
22
23 <%= f.label :chargeuserid %>
24 <%= f.text_field :chargeuserid %> 25
26
27 <%= f.label :desc %>
28 <%= f.text_area :desc %> 29
30
31 <%= f.submit %> 32
33 <% end %>

下面再看浏览器请求的结果:

什么意思,又出错了,看来说是@department为空,可是在添加部门的页面这个是正常工作的啊,为什么呢?对比一下模板中的内容是一样的,问题在于@department变量,额,问题就是这个,原来的时候创建一个部门是由DepartmentsController控制的,此刻改为CompaniesController控制,在DepartmentController中调用create方法的时候调用如下代码:

 1   # POST /departments   2   # POST /departments.json   3   def create   4     @department = Department.new(department_params)   5    6     respond_to do |format|   7       if @department.save   8         format.html { redirect_to @department, notice: 'Department was successfully created.' }   9         format.json { render action: 'show', status: :created, location: @department }  10       else  11         format.html { render action: 'new' }  12         format.json { render json: @department.errors, status: :unprocessable_entity }  13       end  14     end  15   end

@department = Department.new(department_params)原来在调用create的时候它本身给定义好了一个空的department的实例变量,知道问题,那么就来解决这个问题

我们需要将页面中的@department改为一个局部变量。

 1 

New department

2 3 <%= form_for(department) do |f| %> 4 <% if department.errors.any? %> 5
6

<%= pluralize(department.errors.count, "error") %> prohibited this department from being saved:

7 8
    9 <% department.errors.full_messages.each do |msg| %> 10
  • <%= msg %>
  • 11 <% end %> 12
13
14 <% end %> 15 16
17 <%= f.label :name %>
18 <%= f.text_field :name %> 19
20
21 <%= f.label :cid %>
22 <%= f.text_field :cid %> 23
24
25 <%= f.label :chargeuserid %>
26 <%= f.text_field :chargeuserid %> 27
28
29 <%= f.label :desc %>
30 <%= f.text_area :desc %> 31
32
33 <%= f.submit %> 34
35 <% end %> 36 37 38 <%= link_to 'Back', departments_path %>

如何把局部变量传递给局部模板:

由于局部模板就像是函数,考虑到DepartmentController中给@departmentde可以所使用的值,由于表单会被用来初始化department,所以我们只要用一下方法给表单传递一个新的Department对象:

<%= render :partial => "new_department", :locals=>{ :department => Department.new } %>

下面在看一下页面的结果:

工作正常,但是下面有两个Back,额,额,由于局部模板中的Back没有去掉,但是此时已经不需要从创建department到department列表了,此处就删掉吧。简单的很。

以上是"Ruby on rails的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

页面 局部 模板 内容 模版 部门 问题 功能 变量 支架 文件 只是 布局 数据 方法 时候 现实 篇文章 结果 表单 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 深圳九邦互联网科技有限公司 广州百单互联网科技有限公司 厦门中拓互联网络科技有限公司 嘟嘟瓜互联网科技 万达互联网科技 撒么互联网科技公司 互联网科技公司名称 盛创互联网科技有限公司 团飞科技与伯堂互联网服务平台 世界互联网科技公司市值排名 宜昌元轩互联网科技有限公司 深圳育鹏互联网科技有限公司招聘 用友工业互联网科技发展 互联网科技包装股份有限公司上市 东营紫格互联网科技 江苏互联网智能科技产品出厂价 北京军民互联网科技公司 互联网科技创业有什么好项目 高科技和互联网的现代国家 精品咖啡豆 上海挚品互联网科技 碳银互联网科技 互联网科技排名 广州凡科互联网科技 玖二柒互联网科技公司待遇 广州恒生互联网科技有限 未来五年的互联网科技 科技美学互联网 艺术 互联网 科技节活动 微视频大赛
0