Rails helper

9431 ワード

一、まずHelperの方法を理解します:1.helperの方法は方法です.2.ほとんどがviewに適用され、他のシーンで一般的な方法として使用することもできます.3.controllerに書くこともできるし、app/helperモジュールに書くこともできる.4.Railsフレームワークは、form_などのHelperメソッドを提供しています.for、link_toなど;5.合理的にいくつかの機能応用をHelper方法に密封することによって、コード量とメンテナンスコストを大幅に簡略化することができ、いくつかの統一性と風格の方面の要求を完成することができる.
二、Helperメソッドの定義1.コントローラに書かれたシーンをコントローラに書く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モジュールに書かれたシーン各コントローラには、app/helperディレクトリの下でコントローラファイルと同じ名前の対応する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.Rails 2.xには、ビューで使用されるHelperメソッドまたはRubyコードが約束されており、呼び出し中にコードブロック(do..end間のコードセットをコードブロックと呼ぶ)が含まれている場合は、戻り値があるかどうかにかかわらず<%...%>を使用する必要があります.コードブロックが含まれず、結果をページに出力しようとする場合は<%=...%>を使用します.これが私たちが見た<%form_for%>および<%=link_to%>!2.上記の問題はRails 3で統一されている.それは、ページに出力するつもりであれば、<%=...%>./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タグコードを
に囲み、結果を返す適用シーンを仮定します.
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 %>

さあ、まずこれについて話しましょう.暇があれば、私の理解中のルビーon Railsを話してあげましょう.