`

rails 局部模板 partial render 介绍

阅读更多

需要用这样的形式来使用:render :partial => ‘path/filename’。应当注意的是,相应的模板(.rhtml)文件该保存为“_”开头的。比如我的模板文件在app/views/book /_search_form.rhtml,若在BookController的方法中调用时,直接用

render :partial => ’search_form’

若在别的控制器中,则需要

render :partial => ‘book/search_form’

rails中的redirect 和 render区别

Rails里

1. render 和 redirect 只能用一个

2. render 可以翻译成提交,一般的电脑语言翻译成渲染,Rails里render可以自动方式和手动两种

3. 动作控制器通过render方法发送内容给用户,大多数都是提交一个“模板”。视图可以看懂erb的模板,显示出@变量(实例变量)----这种render提交和渲染(把模板呈现为用户看到的视图)过程是自动的,不用你命令render去执行

简单说就是controller中方法里定义的@foo变量,view中rhtml可以用<%=@foo%>显示出来

4. 动作”的结果是提交不同的“模板”时,手工使用render方法

看看书上的介绍

def search
@results =Search.find(params[:query])
case @results
when 0 then render :action=> "no_results"
when 1 then render :action=> "show"
when 2..10 then render :action=> "show_many"
end
end

5. Render的方法可以提交不同的内容


* render(:text=>string) 直接render出文本
* render(:inline=>string,[:type=>"rhtml"|"rxml"])
把传入的string当成模板处理, 相当于rhtml的内容
* render(:action=>action_name) 直接调用某个action的模板,
相当于forward到一个view
* render(:file=>path;[:use_full_path=>true|false]) 使用某个模板文件
render, 当use_full_path打开时可以传入相对路径
* render(:template=>name) 使用模板名render ,
例子如下 render(:template => "blog/short_list")
# 自动使用/app/views/blog/short_list.rhtml(rxml)
* render(partial=>name) :partial
* render(:nothing=>true) 什么也不输出,包括layout
* render() 默认的的render, 相当于render(:action=>self)

而redirect 是引导重新定向

* redirect_to(:action=>'xxx') 使用语法和url_for一样(底层用url_for)
* redirect_to("/localpath")
* redirect_to("http://url")

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 => "form", :locals => { :button_label => "Create zone", :zone => @zone } %>

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


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

<%= render :partial => "customer", :object => @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", :object=>@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 %>

分享到:
评论

相关推荐

    Ruby的render_partial技术详解

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

    Ruby-开箱即用的Rails项目模板

    开箱即用的 Rails 项目模板:深度整合修改后的 swagger-docs,帮助简化业务逻辑无关或边界的事情、干掉更多重复劳动,使开发专注于简洁的业务逻辑。

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

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

    Ruby-StringTemplate一个快速的Rails的模板引擎

    StringTemplate一个快速的Rails的模板引擎,使用Ruby的字符串插值语法专注于速度

    Python开发Rails框架——Django框架介绍.pdf

    Python开发Rails框架——Django框架介绍.pdf Python开发Rails框架——Django框架介绍.pdf Python开发Rails框架——Django框架介绍.pdfPython开发Rails框架——Django框架介绍.pdf

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板.zip

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...

    rails-basic-template:基本 Rails 模板

    Rails 基本模板参考: : Ruby on Rails Gemfile:定义应用程序正在使用的库的文件bundle install:基于Gemfile,安装所有库每次修改 Gemfile 时都应该运行bundle install gem 是 Ruby 的库RubyGems.org 是一个查找和...

    rails框架介绍分享

    介绍rails框架,版本是rails2点几的,不过思路差不多,具体区别可以去看官网

    通过CableReady的惰性加载Rails局部-Ruby开发

    通过CableReady未来派的惰性加载Rails局部函数通过CableReady用法的懒加载Rails局部函数与模板自定义中的帮助程序一起使用 (以 或一个 被渲染。 这些自定义元素具有附加的IntersectionObserver,它将把签名的全局ID...

    Ruby rails 页面跳转(render和redirect_to)

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

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

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

    Ruby on Rails 2.0的新特性介绍

    word文档主要是Ruby on Rails 2.0的新特性介绍

    Rails之道,完整扫描版

    分别介绍了Rails的环境、初始过程、配置和日志记录,Rails的分配器、控制器、页面生成和路由,REST、资源和Rails,ActiveRecord的基础、关联、验证和高级技巧,ActionView的模板、缓存和帮助器,Ajax、Prototype和...

    Ruby on Rails 电子商务模板 批量导入商品

    Ruby on Rails 现在带来了网页开发风暴; 现在国内接触这方面资源较少,php还是主流,可是ruby... 笔者在ruby on Rails 学习中发现一个扩展性极好的模板,spree 工作之余,自己编写了基于这个模板的商品批量导入的脚本

    rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板.zip

    rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板 Rails 电子邮件预览 使用这里 Rails 引擎在浏览器中预览电子邮件。 兼容 Rails 4.2 。电子邮件审阅: 所有电子邮件预览的列表: 代表有两个主题...

    rails-template:我们的 Rails 模板

    rails-template Our Ra​​ils template Make sure that you installed Node.js on your system. `rails new project -m template.rb`一些说明以下两个已新增在application_controller,这样可以依据开发环境不同,...

    rails-new-template:Rails应用模板

    轨道新模板 Rails应用模板 安装 rails new `app_name` -m https://raw.githubusercontent.com/vvmarulin/rails-new-template/master/template.rb

    rails 2.3.2离线安装rails 2.3.2离线安装

    rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...

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

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

    Ruby on Rails Tutorial

    在过去的几年中,《Ruby on Rails Tutorial》这本书被视为介绍使用 Rails 进行 Web 开发的先驱者。 在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on ...

Global site tag (gtag.js) - Google Analytics