- 浏览: 1335567 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
模板基础:
View 层模板可以由三种方式写成。有 .rhtml 扩展名的模板文件混合使用ERb和HTML。有 .rxml扩展名的模板文件使用Builder::XmlMarkup库。有 .rjs扩展名的模板使用了ActionView::Helps::PrototypeHelper::JavaScriptGenerator。
一、RHTML
Rails使用了一个名为Erb的模板解析引擎作为View的底层技术。可以用 .rhtml 文件来创建模板,它将使用标准的Web模板符号来生成基于静态HTML的服务端代码。
在RHTML页面中使用Ruby程序块的常用方法是使用<%= %>和<% %>构造块组织一小块数据。两者的区别是Ruby程序块的结果是否做为一个内嵌的文本显示给用户。
二、使用局部模板
局部模板用来消除重复。
你可以把一个局部模板当成一种子程序:你可从其它模板中调用一次或多次局部模板,只要把它做为参数传递给render对
象。当局部模板完成提交时,它返回控制给调用它的模板。
局部模板与其它模板外观上的的区别是它的文件以下划线”_”字母开头。
三、RJS模板
JavaScriptGenerator 模板文件以 .rjs为扩展名。与用于提交一个动作结果的传统RHTML模板不同,它生成如何修改一个已经被提交页的指令。这样就可轻易地修改一个声明了Ajax应答 的页面内多个元素。这些模板的动作由后台的Ajax调用,并更新请求的原始页。
四、模板环境
模板是包含文本和代码的混合体。代码用于添加动态的内容给模板。代码运行环境能让它访问由控制器设置的信息。
1、控制器的所有实例变量在模板内也是有效的。这就是为什么动作能传递数据给模板的原因。
2、控制器对象的headers,params,request,response和session做为存取器方法在view内也是有效的。但通常
view代码或许不应该使用这些,对它们处理职责应该留给控制器
。
3、当前所用控制器对象可用属性controller来访问。
4、模板的基本目录路径在属性base_path内是效的。
局部模板:
一、使用实例变量
模板可以共享它们之间正常植入标记定义的实例变量。
例如: <% @page_title = "A Wonderful Hello" %>
<%= render "shared/header" %>
现在,页眉可以拾取@page_title变量,并使用它来输出一个 title 标记:
<title><%= @page_title %></title>
二、传递给局部模板内局部变量的值
你可以传递局部变量给局部模板。通过将局部变量名做为键,对象做为值的哈希表来做到。例如:
<%= render "shared/header", { "headline" => "Welcome", "person"
=> person } %>
现在可以在 shared/header 内访问它们:
Headline: <%= headline %>
First name: <%= person.first_name %>
也可以(应该)加上:locals来指出,正在向局部模板传递局部变量
。例如:
<%= render :partial => "account", :locals => { :account =>
@buyer } %>
<% for ad in @advertisements %>
<%= render :partial => "ad", :locals => { :ad => ad } %>
<% end %>
例 子首先提交
"advertiser/_account.rhtml"局部模板,并且传递实例变量@buyer给用于显示的局部模板做为它的局部变量account
。然后提交"advertiser/_ad.rhtml" 并传递局部变量 ab 给用于显示的局部模板做为它的局部变量。
三、局部模板内的特殊局部变量
在局部模板内有个特殊的局部变量,它与局部模板的名字是一样的。
而render对象内的:object参数就用于将标识被传递给局部模板的对象。
例如:提交一个博客条目的局部模板,通常被存储在视图目录app/views/blog中的_article.rhtml文件内。
<div class=”article”>
<div class=”articleheader”>
<h3><%= article.title %></h3>
</div>
<div class=”articlebody”>
<%= h(article.body)%>
</div>
</div>
其它模板使用render(:partial=>)方法来调用它。
<%= render(:partial => “article”, :object => @an_article)
%>
<h3>Add Comment</h3>
通过:object这个“桥”,局部模板内的局部变量article获得了其它模板内的实例变量@an_article的值。
事实上,如果被传递给局部模板的对象是控制器内带有与局部模板同名的实例变量的话,就可以忽略:object参数。在上面例子中,如果控制器已在与将要调
用的局部模板同名的实例变量@article内设置了article的值,那么视图就可以这样来提交局部模板:
<%= render(:partial => “article”) %>
<h3>Add Comment</h3>
四、提交一个局部模板的集合(或者说循环调用局部模板)
前面我们曾写过这样的代码:
<% for ad in @advertisements %>
<%= render :partial => "ad", :locals => { :ad => ad } %>
<% end %>
此例子中需要对一个数组@advertisements进行迭代,并为数组内的每个元素提交一次局部模板。现在这个模式已被一个单独的方法实现了。
现在,可以把三行代码重写为一行代码:
<%= render :partial => “ad”, :collection => @advertisements
%>
这将提交_ad.rhtml局部模板,并且依次传递实例变量数组内每个值给局部模板内的局部变量ad(注意这是默认的变量,变量名跟模板名一样)
。同时格式为
partial_name_counter的迭代器counter将对模板自动有效。在上面例子中该变量为ad_counter。
总结就是传递给render()的:collection参数可以与:partial参数结合起来。:partial参数使用一个局部模板来定义每个条目
的格式,:collection参数给集合内的每个成员应用这个模板。
还有个可选的:spacer_template参数让你指定集合内两个元素之间被提交的模板。例如:
<%= render(:partial => “animal”,
:collection => %w{ant bee cat dog elk},
:spacer_template => “spacer”) %>
它使用_animal.rhtml来提交数组内给出的每个animal,在元素之间都提交_spacer.rhtml。如果_animal.rhtml包
含:
<p>The animal is <%= animal %></p>
若_spacer.rhtml包含:
<hr />
则会看到一个animal名字的列表,并且各个名字之间有个水平线。
五、共享局部模板
Rails约定存储共享局部模板在app/view/shared目录内。如:
<%= render(:partial => “shared/post”, :object => @article)
%>
@article对象将被赋值给局部模板内的局部变量post。
六、局部模板,控制器和RJS
不只是视图模板可以使用局部模板。控制器也可以在一个动作上使用它。局部模板也可以让控制器从视图本身使用的同一局部模板的页中生成片断。当你从使用局部
模板的控制器中,用Ajax来更新部分页时这是很有用的。
Rails使用RJS模板来创建一个JavaScript程序块,并根据页面内容求值,执行,最终在当前页中显示出来。通过RJS模板可实现与当前页面中
DOM元素的交互。
另外的功能:
一。发送文本给客户端(类似java的response.writer.write("str")
render(:text =>string)
将指定的字符串发送给客户端,不做任何模板解释或 HTML 转码。
class HappyController < ApplicationController
def index
render(:text => "Hello there!" )
end
end
二。把 string 内 容作 为指定类 型的模板源代码进行渲染,并将 结果 发送给客户端。
render(:inline =>string, [ :type =>"erb"|"builder"|"rjs" ], [ :locals =>hash] )
把 string 内 容作 为指定类 型的模板源代码进行渲染,并将 结果 发送给客户端。如果提供
了 :locals 参数,其中的内容会被用于给模板中的局部变量设值。
下面的method_missing() 方法 ( 仅当应用程序在开发模式下运行时有 下列代码在控制器中定义了效 ) 。
如果调用控制器时指定的 action 名称无效, method_missing() 会渲染一个内联的模板,将action 的名称和格式化之后的请求参数显示出来。
class SomeController < ApplicationController
if RAILS_ENV == "development"
def method_missing(name, *args)
render(:inline => %{
<h2>Unknown action: #{name}</h2>
Here are the request parameters:<br/>
<%= debug(params) %> })
end
end
end
三。渲染别的action对应的模板
render(:action =>action_name)
注意不是重定向。
四。渲染指定路径( 其中必须包含文件扩展名 ) 的模板文件
render(:file =>path, [ :use_full_path =>true|false], [:locals =>hash)
五。其他参数
在 render() 方法的各种用法中,你都可以使用 :status , :layout 和 :content_type 参
数 。 :status 参 数 用 于 设 置 HTTP 应 答 的 状 态 头 信 息 , 默 认 值 为 “ 200 OK” 。 不 要 在
render() 方法中把状态值设为 3xx 以达到重定向的效果, Rails 提供了 redirect() 方法。
还有一些方法,比如下面的,详情需要看文档。(p422)
render(:update) do |page| ... end
参考:
http://hi.baidu.com/lujie0601/blog/item/fa94612e2099415d4fc22691.html
发表评论
-
ruby计算平方和开方_n次方n次幂
2022-06-28 21:52 715= = = ruby计算平方和开方 3 ** 2#= ... -
Ruby发送HTTP请求
2015-07-21 18:06 1202Ruby使用HTTP协议发送请求的方法备忘。 好像这 ... -
invalid byte sequence in GBK”问题 invalid byte sequence in UTF-8”问题
2015-07-03 15:11 2907碰见错误: test.rb:8:in `ma ... -
Ruby1.9之字符串内编码和外编码
2015-07-02 17:52 1325这里的文章很不错的么:Rubyist http://ru ... -
DevKit介绍和安装in railsInstaller
2015-05-26 17:01 2670DevKit介绍和安装in railsInstaller ... -
Rails_migrations中使用mysql的bigint
2014-09-30 14:32 1047From:http://rubyer.me/blog/468 ... -
Rails外如何启动rails的类自动加载_activates autoloading using ActiveSupport 3.x
2016-06-22 12:08 719The following cod ... -
如何在rails里打开gem里面的类_为何有时候不生效
2014-09-02 21:55 990在rails里面打开某个gem的类,补充一下等等,也 ... -
ruby的加载机制和rails_自动加载机制_对比
2014-09-02 16:51 1620prefer:http://urbanautomat ... -
Rails源码阅读(13)rails中的autoload和ruby的autoload
2014-07-30 17:13 2021Rails源码阅读(13)rails中的autoload和 ... -
Rails中命名路由的区别***_url与***_path
2014-07-29 16:37 1126Rails中命名路由的区别***_url与***_path ... -
ruby_gem安装_切换指定不同的源
2014-07-20 18:09 1187from:http://www.hiceon.com/to ... -
Ruby 的文件操作_不断总结
2014-07-11 11:55 1227一、用文件和目 ... -
Rails源码阅读(12)叫Rails的模块module_Rails常量使用
2014-07-02 09:35 1151The module nams "Rail ... -
注册邮件中的链接无host
2014-05-19 14:47 642在注册邮件中用命名路由的xxx_url不起作用,导致注 ... -
每个命令都有bundle exec的麻烦
2014-04-18 17:33 1471问题: 每次都得搞这个东西bundle exec放在 ... -
关于favicon.ico的报错:RoutingError
2014-03-31 14:45 2012错误: ActionController::Routin ... -
rbenv_安装太慢_解决办法
2014-03-31 13:51 2235rvm做了很多“不为人知”的事情,而且做的太 ... -
配置sunspot tomcat结合sunspot_rails
2014-02-26 10:58 965这个sunspot的东西还是有不少缺点的。 ht ... -
RubyOrRails_使用技巧_收集
2013-11-09 14:39 1116#link_to not working in sc ...
相关推荐
rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...
"inspinia admin - v2.5 Rails_Full_Version" 是一个基于Rails框架构建的后台管理系统的完整版本。这个系统采用流行的Inspinia Admin模板,提供了丰富的功能和自定义选项,旨在帮助开发者快速构建高效、现代且用户...
rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...
使用 `weixin_rails_middleware` 时,开发者应遵循最佳实践,如保持请求和响应的异步处理、合理设计消息模板、确保数据安全性等,以提升用户体验和应用性能。 综上所述,`weixin_rails_middleware` 是一款强大且...
在Rails_Full_Version压缩包中,包含了完整的源代码和必要的资源文件,开发者可以通过解压并导入到Rails项目中,按照官方文档进行配置和定制。同时,这个版本可能还包含了升级记录、更改日志和可能的bug修复,以保证...
《敏捷Web开发与Rails》第三版是一本深入探讨Ruby on Rails框架在敏捷软件开发方法论下的应用指南。本书由多位知名作者共同编写,包括Sam Ruby、Dave Thomas、David Heinemeier Hansson等,他们都是在Ruby社区内享有...
本文将详细探讨其在Rails框架下的种子项目(Rails_Seed_Project),旨在帮助开发者更好地理解和运用这一强大的工具。 首先,我们来了解一下“Inspinia Admin”。这是一款基于Bootstrap 3构建的响应式后台模板,提供...
rails_best_practices rails_best_practices是用于检查Rails代码质量的代码度量工具。 它支持以下ORM / ODM: 活动记录 蒙古型 mongomapper 以及以下模板引擎: erb 哈姆 减肥 拉布尔 rails_best_practices...
InspiniaAdmin 2.5 Rails_Seed_Project是一款基于Bootstrap框架的高级管理模板,专为Ruby on Rails开发者设计,旨在加速Web应用程序的开发过程。这个项目作为种子启动器,提供了完整的后台管理界面,包括丰富的UI...
介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...
《深入解析bhl_rails_solr源码》 在当今的Web开发领域,Rails框架以其高效、简洁的设计理念,深受开发者喜爱。同时,Solr作为一款强大的全文搜索引擎,被广泛应用于各类复杂的数据检索场景。当这两者结合时,便诞生...
RUBY的经典之作,对其在RAILS下开发写得很详细
rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板 Rails 电子邮件预览 使用这里 Rails 引擎在浏览器中预览电子邮件。 兼容 Rails 4.2 。电子邮件审阅: 所有电子邮件预览的列表: 代表有两个主题...
该模板包含的文件列表“inspinia_admin_v2.5_Rails_Full_Version”很可能包括以下组成部分: 1. **静态资源**:CSS样式文件、JavaScript脚本和图像资源。这些文件用于构建用户界面,包括响应式布局、图表、表单元素...
Rails_3_Cheat_Sheets.pdf
InspiniaAdmin 2.5 Rails_full_version
"rails_kindeditor" 插件就是为了解决这一需求,它将 KindEditor 富文本编辑器与 Ruby on Rails 框架相结合,提供了一种简单易用的解决方案。 KindEditor 是一个功能强大的 JavaScript 富文本编辑器,支持多种...
本资料“RestFul_Rails_Dev_pdf_v_0.1.zip”包含了《RESTful Rails Development》的翻译版,将深入探讨如何在Rails中实现RESTful的设计模式。 首先,RESTful设计的核心概念是资源(Resources)。在Rails中,资源...
rails_kindeditor将帮助您的rails应用程序与kindeditor集成,包括图像和文件上传。 安装及使用 将此添加到您的Gemfile gem 'jquery-rails' gem 'rails_kindeditor' 注意:Rails 5.1已从默认设置中删除了对jQuery...