Rubyonrails的示例分析-创新互联
小编给大家分享一下Ruby on rails的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
10年积累的成都网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有平房免费网站建设让你可以放心的选择与我们合作。体验一中添加了一个最基本的支架和一个简单的数据迁移,实现了一个基本的增删改查的功能列表。体验二中要在次功能上继续丰满一下功能。实现如下效果:
在每个公司中都包含有不同的部门,按照体验一中的方法,添加一个部门的支架,一个数据迁移。实现部门的增删改查功能。部门的数据结果如下:
具体方式省略。
简单创建了支架而没有定制应用,它将难以使用,为了给一个公司添加部门,将会边的很麻烦。我们把我们希望的页面和支架生成的部门的页面比较一下:
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文件中的内容:
1New 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? %> 3412 <% end %> 13 14<%= pluralize(@department.errors.count, "error") %> prohibited this department from being saved:
5 67 <% @department.errors.full_messages.each do |msg| %> 8
11- <%= msg %>
9 <% end %> 1015 <%= f.label :name %>18
16 <%= f.text_field :name %> 1719 <%= f.label :cid %>22
20 <%= f.text_field :cid %> 2123 <%= f.label :chargeuserid %>26
24 <%= f.text_field :chargeuserid %> 2527 <%= f.label :desc %>30
28 <%= f.text_area :desc %> 2931 <%= f.submit %> 3233 <% 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改为一个局部变量。
1New department
2 3 <%= form_for(department) do |f| %> 4 <% if department.errors.any? %> 5614 <% end %> 15 16<%= pluralize(department.errors.count, "error") %> prohibited this department from being saved:
7 89 <% department.errors.full_messages.each do |msg| %> 10
13- <%= msg %>
11 <% end %> 1217 <%= f.label :name %>20
18 <%= f.text_field :name %> 1921 <%= f.label :cid %>24
22 <%= f.text_field :cid %> 2325 <%= f.label :chargeuserid %>28
26 <%= f.text_field :chargeuserid %> 2729 <%= f.label :desc %>32
30 <%= f.text_area :desc %> 3133 <%= f.submit %> 3435 <% 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的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站制作公司行业资讯频道!
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
分享题目:Rubyonrails的示例分析-创新互联
链接URL:http://hbruida.cn/article/dgcjgg.html