`
tntyao
  • 浏览: 10744 次
  • 来自: ...
社区版块
存档分类
最新评论

rails 之 render 介绍转

    博客分类:
  • ruby
 
阅读更多
1. partial



1.1 把partial作为view的一部分来渲染,可以调用render方法:

<%=render :partial=>"menu"%>

上面的代码会把文件名为_menu.html.erb的模板渲染到当前模板中。

<%= render :partial => "shared/menu" %>

渲染app/views/shared/_menu.html.erb到当前模板。

1.2 为partial单独指定layout:

<%= render :partial => "link_area", :layout => "graybar" %>

partial的layout文件名必须以下划线开头:_graybar.html.erb,而且必须把layout模板文件和partial放在同一个目录下。



2. 给partial传递局部变量


2.1 :locals选项用于设置partial的局部变量:

<%= render :partial => "list", :locals => { :button_label => "车世界", :cars => @cars } %>

这样就可以在_list.html.erb中访问button_label和cars这两个变量。


2.2 每个partial都有一个和partial名字相同(不带下划线)的局部变量,可以通过:object选项给这个变量传递值:

<%= render :partial => "customer",bject => @new_customer %>

这样就可以在_customer.html.erb中访问customer这个变量,它指向@new_customer。
当然,作为父模板(parent)的一部分,partial可以直接访问父模板的实例变量,例如这里的@new_customer,但是如果这么做的话,partial就跟父模板耦合了,变得不容易重用了。所以建议使用partial的名字来引用实例变量而不是直接访问实例变量。
之前版本的Rails中,如果不指定:object或者:locals选项,rails会自动在父模板中寻找与partial同名的那个实例变量作为partial的局部变量,如:

<%= render :partial => "customer" %>

如果在_customer.html.erb中访问customer这个变量,rails将会自动在父模板中寻找名为@customer的实例变量。这个特性在Rails2.2中已经不建议使用了(deprecated)。Rails3.0中已经将这个特性移除了。


2.3 如果要传递给partial的实例变量名==partial名=model名,可以简写,如:

#当@customer为Customer这个model的实例,并且partial名为customer时

<%= render :partial => @customer %>

#相当于

<%= render :partial => "customer",bject=>@customer %>



3. 渲染集合(Collections)


3.1 :collection选项用于指定被传递给partial的集合对象

假设有books这么个集合,包含了5个Book对象,可以这样使用:

#main.html.erb

<%= render :partial => "book", :collection => books %>

#_book.html.erb

<p><%= book.name%></p>



这样,在main.html.erb中,_book.html.erb的内容会被渲染5次。这时候,partial模板中,与partial同名的那个变量指向了:collection选项传过来的集合中的每一项。如果你不想使用这个与partial同名的变量名,可以通过:as选项来设置你想要的变量名(:as的值只能用symbol,不能是string,否则在partial里会得到nil值):

<%= render :partial => "product", :collection => @products, :as => :item %>

3.2  下标索引值

在设置:collection选项的时候,rails同时提供了一个counter变量给partial模板,变量名以partial名(不带下划线)开头,以_counter结尾,并且经试验,这个变量名不受:as选项影响(也就是说在上面的代码中,这个变量名应该是product_counter 而不是item_counter)。其值为collection对象的索引值(从0开始)。

3.3 :spacer_template

:spacer_template选项用于指定填充于collection每个member之间的模板:

<%= render :partial => "product", :collection => @products, :spacer_template => "product_ruler" %>

上面的代码中,_product_ruler.html.erb的内容将被填充到每一对_product partial之间。
和:object一样,:collection也有简写形式: <%= render :partial => @products %>
分享到:
评论

相关推荐

    rails:Render的Rails 5入门项目

    **Rails 5入门项目——掌握Render的使用** Rails框架是Ruby编程语言中的一个强大工具,用于构建Web应用程序。Rails 5.2版本引入了许多新特性,优化了开发体验。在这个项目中,我们将专注于理解如何在Rails 5中使用`...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    通过以上介绍,我们不仅了解了Rails的基础知识,还深入探讨了其核心组件——Active Record的相关概念和技术细节。这些内容对于初学者来说是非常宝贵的入门资料,同时也是进一步学习和实践的基石。随着对Rails的深入...

    Ruby on Rails实例开发

    在本实例开发中,我们将探讨如何使用Rails进行实际的Web应用构建,同时涉及与之相关的技术,如SQLite数据库、HTML和CSS。 首先,Ruby是Rails的基础,它是一种动态类型的、面向对象的编程语言,以其简洁和表达性强的...

    Rails API 文档

    Rails 2.0文档也会介绍如何将应用部署到服务器,包括配置Capistrano、 Passenger等部署工具。 10. **国际化(I18n)** Rails 2.0引入了强大的国际化支持,使得应用可以轻松地适应多种语言环境。 通过阅读和查阅...

    turbolinks_render:在Rails控制器中通过Turbolink支持`render`

    turbolinks_render 在Rails控制器中使用render并通过Turbolinks处理响应。 Turbolinks开箱即用地支持 。 但是不支持render ,您必须使用。 该宝石旨在解决该问题。 我认为Turbolinks / Rails应该正式处理此问题。 ...

    使用Rails上传和转换视频

    本篇文章将详细介绍如何在Rails中实现视频上传和转换,并提供相关的源码示例。 首先,我们需要一个用于文件上传的组件。在Rails中,最常用的文件上传库是Paperclip和CarrierWave,但现在更推荐使用ActiveStorage,...

    Flexible Rails: Flex3 on Rails2

    作者通过对Flex 3和Rails 2的概述以及它们如何协同工作的详细介绍,帮助读者更好地理解这两种技术的优势,并指导读者构建出性能优越且易于维护的应用程序。 #### Rails 2 概览 Rails 2是Ruby on Rails框架的一个...

    rails上传文件_paperclip

    render :new end end private def user_params params.require(:user).permit(:name, :email, :avatar) end ``` **Paperclip的高级特性** 1. **存储选项** Paperclip支持多种存储方式,包括本地文件系统...

    render_anywhere, 将 Rails 模板呈现给任何类的字符串.zip

    render_anywhere, 将 Rails 模板呈现给任何类的字符串 render_anywhereRails,只能在控制器上下文中呈现模板。 这个小 gem 允许从任何地方调用"呈现": 模型,后台作业,rake任务,你将它的命名为。安装 gem install...

    ruby on rails对mongodb的操作

    在Rails应用中,我们还可以使用`form_for`和其他Rails助手来处理表单提交,以及`render`和`redirect_to`来管理视图和路由。 最后,`Rails应用中MongoDB+MySQL杂交`的话题意味着在同一个应用中同时使用MongoDB和...

    Crafting Rails Applications

    作者José Valim不仅是一位资深的Ruby on Rails开发者,也是Rails核心团队成员之一,因此书中内容不仅覆盖了理论知识,还有大量实践经验分享。 #### 二、书籍内容概览 本书不仅仅局限于介绍如何使用Rails内置功能...

    Rails里给文件上传添加progress_bar

    在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...

    Ruby的render_partial技术详解

    整理后的在Ruby on rails的Haml有关render_partial的用法,本资源为一张图

    The Rails 4 Way

    **Rails环境与配置**章节是本书的一个重要组成部分,主要介绍了Rails 4的应用程序如何设置不同的运行环境以及相关的配置选项。 1. **Bundler(包管理器)** - Bundler是一个用于Ruby项目依赖管理的工具。 - 它...

    RJS Templates for Rails

    在Rails框架中,RJS模板通常与ActionController的`render :update`或`render :js`方法一起使用。这些方法会触发一个RJS模板的执行,生成的JavaScript代码会被发送到客户端并在浏览器中执行。通过这种方式,开发者...

    flex on rails文档

    本章节主要介绍了 **Flexible Rails** 的背景、特点以及它为何成为开发 Rich Internet Applications (RIA) 的优选方案。 #### 二、Rails 2 概览 **Rails 2** 是 Ruby on Rails 的一个重要版本,它极大地简化了 Web ...

    Ruby-这是一个在Rails应用程序中使用React并使用webpack的示例

    在Ruby开发领域,Web开发框架Rails(Ruby on Rails)因其高效和简洁的代码风格而备受开发者喜爱。近年来,随着前端技术的发展,JavaScript库如React在构建用户界面方面展现了强大潜力。本示例将探讨如何在Rails应用...

    rails ajax提交文件或图片

    在Rails框架中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于创建动态和交互式的Web应用程序。AJAX允许页面在不刷新整个页面的情况下与服务器进行通信,从而提高用户体验。在本篇博文中,我们将...

    rails实现验证码实例

    在Ruby on Rails(Rails)框架中,验证码是一种用于防止恶意自动化的工具,它通常用于注册、登录和其他敏感操作,以确保只有人类用户能够执行这些操作。在这个实例中,我们将探讨如何在Rails应用中实现验证码功能。 ...

    rails有用的命令

    - `render :partial =&gt; "cart_item", :collection =&gt; @cart.items`:在视图中渲染局部模板“cart_item”,遍历并显示@cart.items中的每一项。 13. **Rails新命令**: - `$ rails new my_project`:创建名为my_...

Global site tag (gtag.js) - Google Analytics