zoukankan      html  css  js  c++  java
  • 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 %>


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

  • 相关阅读:
    mapreduce框架详解【转载】
    Hadoop的基本命令【转载】
    mininet实验 设置带宽之简单性能测试
    Opendarlight Carbon 安装
    mininet实验 测量路径损耗率
    Controller与Switch建立连接
    OpenFlow协议
    Controller控制器
    进击的SDN
    SDN前瞻 传统网络的缺陷
  • 原文地址:https://www.cnblogs.com/mingforyou/p/2654133.html
Copyright © 2011-2022 走看看