`
hbxiao135
  • 浏览: 108850 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails笔记: 常识

阅读更多
view分为 builder模式和rhtml模式

builder模式例子如下,rails自带

xml.div(:class => "productlist") do
    xml.timestamp(Time.now)
        @products.each do |product|
            xml.product do
            xml.productname(product.title)
            xml.price(product.price, :currency => "USD")
        end
    end
end

如果标记和内置方法重复,可以使用something!()来产生标记

rhtml类似于jsp, <%=...%>输出 <%...%>纯标记 <%...-%>自动删除自己的空行

h方法提供了html encoding
Helper

XXXController都会对应一个 XXXHelper(xxx_helper.rb)来写帮助方法, 这些方法在rhtml中都可见

要实现跨controller调用,可以

    * 在application_helper.rb中写方法
    * 在controller中通过helper :some_helper.rb导入
    * 在controller中通过helper SomeHelper导入(类已经栽入的情况下)

通过helper_method 还可以把controller中的方法变为helper,但是这样作不推荐,破坏封装

rails内置了很多helper可用,比如各种单位的换算helper(对view特别有意义),详情查阅rdoc 特别的helper有

    * debug 把对象以html可见的方式打印在页面,方便调试
    * simeple_format 简单的格式化string,添加

      段落和
    * excerpt 给字符两边添加... "...Some words fo..."
    * highlight(string,highword) 添加...
    * truncate(sring,maxlen) 给字符右边添加... "hello this is my..."
    * pluralize(num,word) 自动添加复数形式 1 person -> 2 people
    * markdown 文章filter
    * texttile 文章filter

处理链接

link_to "xxxx",{hash},{hash}

第一个是链接文字,第二个hash和url_for的一样,第三个hash是用户自己在<a>中添加的标签,比如

<%= link_to "Delete", { :controller => "admin",
                        :action => "delete",
                        :id => @product
                        },
                        { :class => "redlink",
                        :confirm => "Are you sure?"
                        }
%>

button_to 的参数和link_to一样, 产生一个button来跳转(安全的POST协议),但是button_to要单独在一个form里面,html不允许嵌套form

link_to_unless_current 自动识别当前链接, 如果当前url和链接一样, 就只产生文本

image_tag嵌套进入link_to

mail_to 有一个:encode=>"javascript" 可以实现把email地址编码防spider

stylesheet_link_tag 添加css

auto_descovery_link_tag 自动申明rss

默认所有的image在/images css在/stylesheets,除非显示使用/xxx来指定根路径另外可以修改 ActionController::Base.asset_host = "http://media.my.url/assets" #共同的prefix 这样可以实现静态内容专门在一一起
分页

分页涉及到controller和view两个部分在controller中 Paginator对象, 专门负责分页 ,默认分页为10个一页

@user_pages, @users=paginate(:users,:order_by =>'name')

在页面里面使用<%=pagination_links(@user_pages)%> 会自动产生页面链接

详情查阅RDoc
表单处理

本质上rails是简单的把上行的参数设置为层次分明的hash(aaa.bbb.ccc 映射为 aaa[bbb][ccc]), 这样来和activerecord自动交换数据,但是也可以直接读取之

param[:xx][:yy] rails推荐以symbol来读取(string也可以)

大多数输入helper前两个参数分部是:variable和:attribute ,最后一个是增加的html options 例子如下 <%=xxx_field :variable,:attribute,options_hash%>

注意 update_attribute会自动调用save方法
表单处理 FormHelper中的方法(和Model绑定)
普通输入框

    * text_field
    * hidden_field
    * password_field
    *

      text_area
    *

      radio_button 第三个参数是tag_value,当他和value相等的时候显示为selected
    * check_box value必须为true/false或者转换为int的值(非0为true) 倒数两个参数为on_value和off_value 为打开/关闭时提交的值, 默认为"1","0"

列表

select(:variable, :attribute,choices,options,html_options)

choice参数为enumerable,当enumerable的元素为[a,b]这样的长度为2数组的时候,数组第一个元素为value,第二个为key

collection_select(:variable,:attribute,choices,:inner_attr_for_key,:inner_attr_for_value)专门用来列表集合
分组列表

暂时不看 @@@
日期输入框

date_select(:variable,:attribute,options) datetime_select(..)是处理和model相关的日期

select_xxx 是处理普通日期(直接通过params访问)

没有怎么看明白有什么用处
上传文件

form中需要添加:multipart=>true,本质上然后通过对应的参数获得数据(一个StringIO) 通过read即可读取全面内容到string中然后就相当于拿到文件内容处理了
错误处理

上门的helper参数都会自动读取对于field的错误信息(errors.on(field)),发现错误以后会自动产生一个class=fieldWithErrors的div,通过css可以控制显示. 如果需要直接读取某个field的错误信息, 可以使用<%= error_message_on(:bean,:field)%>,读取所有错误使用<%= error_messages_for(:bean)%>
FormTagHelper 和Model无关的方法

FormTagHelper中的方法都比Form中多一个_tag结尾

    * start_form_tag和end_form_tag form开始结束
    * submit_tag 提交按钮

其他FormHelper中的帮助方法都有一个对应的_tag版本,参数接受 :name,value,html_options

例子如下

<%=text_field_tag(:arg1,@params[:args],:size=>3)%>
layout技术 (sitemesh式的模板)

layout模板中可以访问所有对应页面中能访问的对象,还多有@content_for_layout参数来指向整个页面输出的内容

自动查找: 一个xxx_controller对应了一个在layout下同名的xxx.rhtml/rxml作为他的layout,

显式申明:

   1. 在controller中通过layout申明一个string, 支持:except和:only参数(过滤:action名)
   2. 声明为nil表示关闭layout
   3. 申明为一个:symbol表示通过当前类symbol方法获取string名

string对应了 string.rhtml或者string.rxml

直接render: 直接调用render(:layout=>"layouts/xxxx")可以使用layout,或者使用:layout=>false关闭layout
partial page template 页面片断

页面片断的页面必须以_开头命名,放在和controller相同路径下,使用render(:partial=>"xxx",:object=>@newinst)访问

文件名必须ruby变量规范和文件名普通规范,通过:object注入的参数通过文件名访问,比如_myname.rhtml就得到了myname这个参数,要追加其他参数,使用:locals={...}

如果忽略:object参数表示把@xxx 自动传入 _xxx.rhtml中的xxx变量, 也就是当@instance和partial中的变量名相同时候, 可以省略:object
使用集合的partial

通过 render(:partial=>"xxx" ,:collection=>xxx) 可以指定一个集合, 集合中的元素会传给partial content作为主元素,同时还会添加一个xxx_counter来作为index, 此时使用:spacer_template=>"yyy"还可以指定两个元素之间使用的空白template

如果:partial=>"xxx/yyy" 指定的名字含有/ ,那么rails默认为这个路径从/app/views开始,通过这个方法可以做到多个controller使用一个partial conetent
components 组件

在页面中通过render_component使用 render_component(:controller=>'xxx',:action=>'fdas')

需要注意的是要注意避免循环引用,所以一般用来作component的action最好使用render(:layout=>false...)或者在class中申明 layout "xxx","except=>:xxxx
独立的component组件

    * 必须方在components/xxx下面
    * 使用XXX::MyController申明 必须在model xxx中
    * 类开头申明uses_component_template_root
    * 使用方式为<%%=render_component):controller=>'xxx/my',:action=>'yyy') %>
http://qbar.qq.com/pd4b5b1t/r/?76
分享到:
评论

相关推荐

    Rails对象:灵活的Web应用程序设计说明Objects on Rails: Notes on Flexible Web Application Design

    “开发人员的笔记本”记录了一些准则,技术和想法,这些准则,技术和想法将经典的面向对象的思想应用于Ruby on Rails应用程序。

    Ruby_on_Rails笔记

    在《Ruby on Rails笔记》中,作者陈刚分享了他在学习Ruby on Rails过程中的经验与心得。这份笔记不仅包含了作者的学习历程和个人体会,还汇集了他在学习过程中遇到的问题及其解决方案。作者提到,“读不如做,做不如...

    Ruby_On_Rails笔记

    综上所述,Ruby on Rails的笔记内容涵盖了从安装Rails环境到创建和运行一个简单的Rails项目的基础知识,这些内容对于初学者来说是学习Rails框架的极好入门材料。通过对这些知识点的学习,初学者可以快速了解Rails的...

    web敏捷开发rails笔记

    ### Web敏捷开发与Rails实践详解 #### 一、Rails简介及环境搭建 Rails是一个用于Web开发的开源框架,它基于Ruby语言,强调简洁性、生产力和开发者效率。Rails通过约定优于配置的原则,使得开发者能够快速地搭建Web...

    ruby on rails 笔记(陈刚)

    从给定的文件信息来看,这份文档是陈刚关于Ruby on Rails的学习笔记,旨在帮助初学者更好地理解并掌握Ruby on Rails这一流行的Web开发框架。以下是对文档中提及的关键知识点的详细解析: ### 安装与配置 #### Ruby...

    rails查询学习笔记

    标题 "rails查询学习笔记" 涉及的是Ruby on Rails框架中的数据库查询技术。Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,使得开发Web应用更加高效...

    rails _sunspot 学习笔记

    1. **Ruby on Rails 3**:本文档主要针对 Rails 3 版本。 2. **Solr**:全文检索引擎,Sunspot 依赖于 Solr 来实现其功能。 3. **Sunspot gem**:Sunspot 的核心 gem,通过这个 gem 可以轻松配置和使用 Sunspot 功能...

    Ruby-on-Rails-101:Ruby on Rails 笔记摘自 WDI HKV 和其他来源。 比如,lynda的在线Rails教程

    本笔记摘录自WDI HKV以及lynda.com的在线Rails教程,旨在提供一个全面且深入的学习指南。 ### 1. **基础概念** - **MVC架构**:Rails采用Model-View-Controller(MVC)设计模式,将业务逻辑(Model)、用户界面...

    robin_on_rails:Robin on Rails:有关技术和其他知识的笔记

    Robin on Rails:我的知识库概述Robin on Rails是我的知识库,我可以在其中添加笔记和想法。 我试图在其他平台上构建我的网站。 最终,我回到了常规的GitHub存储库。 毕竟,我是一名软件开发人员。资料夹我将感兴趣...

    rails-style-guide:社区驱动的Ruby on Rails样式指南

    Rails样式指南榜样很重要。 -军官Alex J. Murphy / RoboCop 小费您可以在找到本指南的精美版本,并对其导航进行了改进。 本指南的目的是为Ruby on Rails 4开发提供一组最佳... 笔记这里的一些建议仅适用于Rails 4.0+。

    rails 入门详细笔记

    rails官网入门笔记的翻译,非常不错的rubyonrails入门教程!

    Notes-app-React-Rails:具有Rails,PostgreSQL,React和Bootstrap的Notes应用

    笔记应用 使用Ruby on Rails,Postgres和React的Notes应用程序。 要求 Ruby2.3.8 Rails 5.1.5 Postgres&gt; = 10 我正在使用处理Ruby环境。 对于此存储库,环境在.rvmrc文件中配置。 怎么跑? 使用以下内容创建....

    rails-mini-project:熨斗三期的Rails Mini项目

    笔记: 如果尝试运行rails并引发有关纱线或卷筒纸包装机的错误,请确保通过运行安装纱线 纱线-版本。 如果似乎已安装纱线,请通过运行以下命令检查所有软件包是否为最新版本 毛线安装-检查文件 如果未安装yarn,...

    rails-study:学习滑轨

    笔记编程Ruby Ruby元编程 Ruby on Rails教程 敏捷Web开发Rails 5 附注4(21-24) 杂项Ruby其他注释Rails杂项说明上传文件说明注意事项Sidekiq注意Webpacker注意相关的其他项目及笔记: 资本主义研究耙研要学习: ...

    笔记:各种生活技巧,开明秘密和开发者笔记

    【笔记:各种生活技巧,开明秘密和开发者笔记】 这篇笔记集合了多种领域的知识和技巧,包括但不限于技术开发和个人生活窍门。它旨在为读者提供一个综合性的资源库,帮助他们在日常生活中找到解决问题的新方法,并在...

    ruby on rails入门

    - **Notes 表**:创建 Notes 表来管理用户的笔记。 - **使用 Model 维护关联**:利用 ActiveRecord 的关联功能来处理表之间的关系。 - **Session 变量**:使用 Session 变量来保存用户的数据,以便在不同页面之间...

    笔记本API

    去污该项目旨在了解和实践使用Ruby on Rails开发的API的结构。 该项目正在使用gem 调整协议以符合的规范。依存关系Ruby 2.6.3版Rails版本6.0.3开始使用要配置环境,请按命令运行: rails db:create db:migrate db:...

Global site tag (gtag.js) - Google Analytics