`

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”写声明;如下面示例:

复制代码
复制代码
 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")
      end
    end
复制代码
复制代码


三、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

复制代码
复制代码
<table>
  <th>
    <td>序号</td>
    <td>姓名</td>
    <td>部门</td>
    <td>入职时间</td>
  </th>
  <% i = 1 %>
  <% for user in @user %>
    <tr>
      <td><%= i %><td>
      <td><%= user.name %><td>
      <td><%= user.department.name %><td>
      <td><%= date_fmt(user.in_date) %><td>
    </tr>
  <% end %>
</table>
复制代码
复制代码

 

四、如何编写一个类似form_for的Helper方法(带有代码块的)
其实很简单,但这中间有几个小秘&密,仔细看!
我们假设一个应用场景:将用户传入的Html标签代码括在一个<form>中,并将结果返回。

复制代码
复制代码
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
复制代码
复制代码
<% my_form_for url_for(:controller=>:users, :action=>edit, :id=>@user.id) do %>
  <input ...>
  <input ...>
  <input type="commit">
<% end %>
复制代码
复制代码
复制代码
1
6
分享到:
评论

相关推荐

    foundation_rails_helper:Zurb基金会的Rails Helper框架

    gem 'foundation_rails_helper' , '~&gt; 3.0' 然后执行: $ bundle 兼容性 仅完全支持Rails 4.1 / 4.2 / 5/6和Foundation 6 某些功能可能适用于Foundation 5及更早版本,但结果可能会有所不同,并且

    iPhone客户机应用开发教程

    尽管如此,开发者并不总是直接使用iUI,而是通过编写通用的Ruby helper方法来创建HTML,这些方法可以绑定到Rails插件中,方便在任何Rails应用中使用。教程中提到的Soups OnLine示例是一个列出了烹饪方法的网站,它为...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Rails相关电子书汇总

    5. **辅助方法(Helper Methods)**:为视图提供便利的功能,如链接生成、样式辅助等。 6. **Scaffold**:快速开发工具,可以自动生成用于CRUD(创建、读取、更新、删除)操作的基本控制器、模型和视图。 7. **...

    rails 项目起步示例

    - **Helper**:辅助方法,提供在视图中复用的函数。 - **Controller**:处理HTTP请求,调用模型并决定如何呈现视图。 - **Session** 和 **Cookie**:用于跟踪用户状态,如登录信息。 - **Authentication** 和 **...

    好用的rails 2.0 Api 文档

    Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...

    ruby on rails(开发文档)

    7. **Helper方法**:为了保持视图的简洁,Rails允许你在helper模块中定义辅助方法,然后在视图中调用。 8. **测试驱动开发(TDD)**:Rails鼓励使用测试来驱动开发,内置了Test::Unit和RSpec等测试框架。 9. **...

    ruby on rails 2.3.5 api html版

    5. **Helper方法**:这些辅助方法在视图层提供便利的功能,如HTML辅助方法,用于生成HTML元素。 6. **ActiveSupport**:这是Rails的一部分,包含大量实用的工具类和方法,如时间/日期处理、JSON解析和编码等。 7. ...

    ruby on rails社区网站开发源码

    9. **辅助方法(Helper)**:辅助方法可以在视图中使用,帮助处理复杂的展示逻辑,如格式化日期、链接生成等。 10. **测试(Testing)**:Rails提供了一套强大的测试工具,如RSpec和Capybara,用于编写功能测试、...

    rails_js_helper:可以在 Javascript 上使用 image_path、asset_path 和命名路由助手(有限)

    这个 gem 在rails_helper.js.coffee.erb.上的编译时间上嵌入了image_path 、 asset_path和路由表rails_helper.js.coffee.erb. RailsHelper有一些功能。 局限性 这个 gem 只能使用没有命名路由的段。 前任。 # ...

    Apress - Practical Rails Projects (Oct 2007)

    视图方面,会涵盖ERB模板语言的使用,以及如何利用辅助方法(Helper Methods)来增强视图的功能。控制器部分则会介绍动作、HTTP请求和响应,以及如何使用过滤器来实现逻辑控制。 书中还会涉及Rails的测试驱动开发...

    Rails入门教程一(翻译).pdf

    至于视图,会讲解ERB(Embedded Ruby)模板语法,如何在HTML中嵌入Ruby代码,以及辅助方法(Helper Methods)的使用,它们能帮助开发者更好地组织和复用视图代码。 最后,教程可能会简要介绍测试(Testing),Rails...

    Ruby on Rails中文指南

    6. **辅助方法(Helper Methods)**:辅助方法是为了保持视图整洁而创建的函数,它们可以提供重用的代码或复杂的逻辑。 7. **哈希与符号化键(Hashes and Symbolized Keys)**:在Rails中,使用符号作为哈希键可以...

    波洛:胡须上的胡须

    该模板将有权访问所有常规的rails helper方法以及在控制器中设置的任何实例变量。 如果您不仅仅需要包含一个可选的视图类,则它应与部分视图具有相同的名称,但不能带下划线。 app/views/posts/post_list_view.rb ...

    Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码。

    8. **app**:应用程序核心代码目录,包括模型(Model)、视图(View)和控制器(Controller),以及帮助器(Helper)、邮件器(Mailer)、通道(Channel)等。 9. **tmp**:临时文件目录,存储运行时生成的文件,如...

    ruby on rails 教程源码

    - **helpers**: 辅助方法存储在`application_helper.rb`等文件中,可跨视图共享代码。 4. **db**目录:包含数据库迁移文件,如`migrate`子目录下的`.rb`文件,它们描述了数据库结构的变化。 5. **bin**目录:包含...

    Ruby On Rails中文教材(PDF)

    7. **Helper方法**:Rails提供了许多内置助手方法,帮助开发者在视图中处理复杂的逻辑和呈现数据。 8. **ActiveSupport库**:包含许多有用的工具方法和实用程序,如时间格式化、字符串操作等,大大提升了开发效率。...

    ruby on rails 2.2.2 参考手册

    4. **Helper**:助手方法可以帮助视图层处理复杂的逻辑,减少视图的复杂度,通常定义在`app/helpers`目录下的各个助手模块中。 5. **Scaffolding**:Rails的快速开发特性,能自动生成用于CRUD(创建、读取、更新、...

Global site tag (gtag.js) - Google Analytics