博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rails helper
阅读量:6087 次
发布时间:2019-06-20

本文共 1943 字,大约阅读时间需要 6 分钟。

一、首先了解一下Helper方法:

1. helper方法就是方法;
2. 它大部分在view中应用,也可以做为普通方法使用在其它场景中;
3. 它可以写在controller中,也可以写在app/helper模块中;
4. Rails框架提供了一些Helper方法,如:form_for、link_to等等;
5. 通过合理的将一些功能应用封闭成Helper方法,可以很大程度上简化代码量和维护成本,并且能完成一些统一性和风格方面的要求。

二、Helper方法的定义

1. 写在controller中的场景
    写在控制器中的Helper方法,或者打算将控制器中的某个方法开放成Helper方法,以便在视图中使用时,必须使用“helper_method :xxx”写声明;如下面示例:

class UsersController < ApplicationController   helper_method :date_fmt   def date_fmt date     return date.strftime("%Y-%m-%d")   end end

2. 写在app/helper模块中的场景
    每个控制器都可以有一个对应的Helper模块,它在app/helper目录下,与控制器文件同名。
    ./app/helper/users.rb

module UsersHelper      def date_fmt date        return date.strftime("%Y-%m-%d")      endend

三、Helper方法中视图中的使用
Rails中的视图与JSP一样,属于嵌入式程序代码(这也是为什么扩展名为*.erb的意思),即它的内容可以是Html标签与Ruby代码的结合,
在视图中可以编写Ruby代码(使用<%%>括起来),也可以编写HTML标签代码。
1. 在Rails2.x中有个约定,视图中所使用的Helper方法或Ruby代码,调用过程中包含代码块(do..end之间的代码集合就叫代码块)的,
   无论是否有返回值,必须使用<% ... %>。如果不包含代码块并且打算将结果输出到页面的,使用<%= ... %>,这就是我们所看到
   的<% form_for %>和<%= link_to %>啦!
2. 上述提到的问题在Rails3中得到了统一,那就是只要打算输出到页面,均使用<%= ... %>
./app/view/users/index.html.erb

<% i = 1 %> <% for user in @user %>
<% end %>
序号 姓名 部门 入职时间
<%= i %> <%= user.name %> <%= user.department.name %> <%= date_fmt(user.in_date) %>

 

四、如何编写一个类似form_for的Helper方法(带有代码块的)

其实很简单,但这中间有几个小秘&密,仔细看!
我们假设一个应用场景:将用户传入的Html标签代码括在一个<form>中,并将结果返回。

def my_form_for url, &block  #with_output_buffer是rails提供的一个方法,它能够执行代码块,并返回执行后的结果;  content = with_output_buffer(&block)  #concat也是rails提供的一个方法,它能够将字符输出到视图的调用位置,这是秘&密一般人可不知道哦!    #不信的话,你也可以用return 返回,看看结果是不是你想要的!  concat("
") concat(content) concat("
")end

 

<% my_form_for url_for(:controller=>:users, :action=>edit, :id=>@user.id) do %>      <% end %>

好了,先说到这吧,有空继续为你讲述我理解中的Ruby on Rails!

转载地址:http://jcvwa.baihongyu.com/

你可能感兴趣的文章
百度地图 IOS sdk 错误总结
查看>>
Weex学习第三篇:模版,样式,脚本
查看>>
高层吊运机在吊运过程中的常见故障排除法
查看>>
oracle mysql5.7 Json函数
查看>>
ajax结合js实现服务器
查看>>
javascript 日期 获取周等
查看>>
c++连接数据库
查看>>
前端开发框架整理
查看>>
集群之MYsql主从服务之引伸出Mysql互为主从(环形结构)外加简单实现自己个人的负载均衡器(3)...
查看>>
Centos7重置Mysql 8.0.1 root 密码
查看>>
多线程测试工具(GroboUtils)的使用
查看>>
5分钟学会 Thymeleaf 的基本使用
查看>>
tensorflow初探-checkpoint转换成pb
查看>>
Xcode5的Retina屏幕
查看>>
求一个整形数组中一个index,index左边的和 等于index 右边的和
查看>>
买MyEclipse送书活动|《Effective Java中文版(第2版)》《Java编程思想(第
查看>>
微信浏览器取消缓存的方法
查看>>
JSP 结构
查看>>
由&引发的转义问题
查看>>
亲爱的项目经理,我恨你
查看>>