一、首先了解一下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
module UsersHelper def date_fmt date return date.strftime("%Y-%m-%d") endend
序号 | 姓名 | 部门 | 入职时间 | <% i = 1 %> <% for user in @user %>||||
<%= 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("")end
<% my_form_for url_for(:controller=>:users, :action=>edit, :id=>@user.id) do %> <% end %>