Rails helper

一、首先了解一下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”写声明;如下面示例:
Rails helper
Rails helper
 class UsersController < ApplicationController

helper_method:date_fmt

defdate_fmtdate

returndate.strftime("%Y-%m-%d")

end

 end
Rails helper
Rails helper

2.写在app/helper模块中的场景

每个控制器都可以有一个对应的Helper模块,它在app/helper目录下,与控制器文件同名。

    ./app/helper/users.rb
Rails helper
Rails helper
    module UsersHelper

defdate_fmtdate

returndate.strftime("%Y-%m-%d")

end

    end
Rails helper
Rails helper

三、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
Rails helper
Rails helper
<table>

<th>

<td>序号</td>

<td>姓名</td>

<td>部门</td>

<td>入职时间</td>

</th>

<%i=1%>

<%foruserin@user%>

<tr>

<td><%=i%><td>

<td><%=user.name%><td>

<td><%=user.department.name%><td>

<td><%=date_fmt(user.in_date)%><td>

</tr>

<%end%>

</table>
Rails helper
Rails helper

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

其实很简单,但这中间有几个小秘&密,仔细看!

我们假设一个应用场景:将用户传入的Html标签代码括在一个<form>中,并将结果返回。
Rails helper
Rails helper
def my_form_for url, &block

#with_output_buffer是rails提供的一个方法,它能够执行代码块,并返回执行后的结果;

content=with_output_buffer(&block)

#concat也是rails提供的一个方法,它能够将字符输出到视图的调用位置,这是秘&密一般人可不知道哦!

#不信的话,你也可以用return返回,看看结果是不是你想要的!

concat("<form'#{url}'>")

concat(content)

concat("</form>")

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

<input...>

<input...>

<inputtype="commit">

<% end %>
Rails helper
Rails helper
Rails helper

相关推荐