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

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.2应用程序,您可以将其用作上自己的Rails项目的起点。 该示例应用程序部署在。部署方式请按照位于的指南进行操作。

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

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

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

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

    Ruby的render_partial技术详解

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

    Ruby rails 页面跳转(render和redirect_to)

    Ruby代码 代码如下:if @user.update_attributes(:password =&gt; params[:user][:password]) flash[:notice...网上找了下才发现redirect_to和render还是有很多区别的,我以前居然一点都没有注意,汗.. redirect_to实现的是

    Ajax-Rails-4-AJAX-modal-form-render-JS-response-as-table-row.zip

    Ajax-Rails-4-AJAX-modal-form-render-JS-response-as-table-row.zip,rails 4 ajax模式表单将js响应呈现为表行,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于...

    caxlsx_rails:一个Rails插件,为axlsx gem提供模板

    要求在Rails 4.2、5.x和6.0上测试对于Rails 3.1或3.2,请使用3.0版从0.5.0开始,需要Axlsx 2.0.1,但强烈建议2.1.0.pre,这需要rubyzip 1.1.0 从Rails 4.1开始,您必须使用render_to_string呈现邮件附件。...

    polymorphic_render:扩展 Rails 视图渲染

    多态渲染安装添加到您的 gemfile 中 gem 'polymorphic_render'使用只需写下您的观点: = render @model-# or= render @models 这: = polymorphic_render @model-# or= polymorphic_render @models 而且.....

    Crafting Rails Applications

    If you’re an intermediate or advanced Rails developer looking to dig deeper and make the Rails framework work for you, this is for you. We’ll go beyond the basics of Rails; instead of showing how ...

    rails 连接mysql的问题解决

    找不到指定的模块。... 您可能感兴趣的文章:Ruby rails 页面跳转(render和redirect_to)Rails link_to 详解rails常用数据库查询操作、方法浅析学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake,

    sift:轻松在Rails控制器中添加过滤

    筛 一个用于构建自己的过滤器并使用Rails和Active Record进行排序的工具!开发人员使用情况在您的控制器中包括Sift,并定义一些过滤器。 class PostsController &lt; ApplicationController include Sift filter_on ...

    11. Render 部分partial与使用上的实例

    [Ruby_on_Rails][中文][Rails_5.x]__11._Render_部分partial與使用上的實例

    render_async:render_async可让您使用AJAX异步包含页面

    :waving_hand: 欢迎使用render_async 让我们再次加快Rails页面的速度 :horse: render_async可以使您的页面向用户更快地显示。 通过将部分视图呈现给视图,页面可以无缝无缝地变得更快。 局部渲染是异步的,它使...

    CVE-2020-8163:CVE-2020-8163-在Rails中远程执行用户提供的本地名称的代码

    5.0.1之前的Rails版本中存在一个漏洞,该漏洞将允许攻击者控制render调用的locals参数。 已为该漏洞分配了CVE标识符CVE-2020-8163。 受影响的版本:rails &lt;5.0.1不受影响:不允许用户控制本地名称的应用程序。 ...

    rails_com:Rails通用引擎

    RailsCom Rails通用基础库 功能 例如:puma,配置等。...= render 'shared/locales' %&gt; 支持枚举 # zh.yml activerecord : enum : notification : receiver_type : User : 全体用户 Member : 成员 t . select :r

    jb:用于Ruby on Rails的简单快速的JSON API模板引擎

    将名为*.jb的模板文件放在Rails应用程序的app/views/*目录中,然后进行渲染。 产品特点 没有难看的建造者语法 没有method_missing调用 带:collection选项的render_partial实际上会渲染集合(与Jbuilder不同) 句法 ...

    prerender_rails_embedded

    预渲染 Rails 嵌入式 一个 rails gem 使用中间件来渲染 JavaScript Web 应用程序,无需安装其他服务即可动态调用 phantomjs。 概述 使用Prerender Rails Embedded可以避免在 ... use Rack :: Prerender before_render

    stripe-rails:用于与Stripe集成的Rails引擎

    = render :partial =&gt; 'stripe/js' %&gt; 在这两种情况下,stripe-rails都会选择适合您的开发环境的stripe.js版本,并自动对其进行配置以使用您的可发布API密钥。 默认情况下,它在您的development环境中使用stripe-...

    Ruby-RailsChat是一款由Rails开发的实时Web聊天室

    RailsChat是一款由Rails开发的实时Web聊天室,在Render_sync的基础上完成,有需要即时通讯的应用可以考虑这个Example

    spreadsheet:使用Reactive Rails创建基于Web的电子表格的组件框架

    试算表Rails应用的电子表格view_component安装将此行添加到您的应用程序的Gemfile中: gem 'spreadsheet' , github : 'magma-labs/spreadsheet' 然后执行:$ bundle 或将其自己安装为:$ gem install spreadsheet ...

Global site tag (gtag.js) - Google Analytics