Displaying articles with tag helper

Ruby on Rails :: Customize Form helper

Posted by PunNeng, Sun Jun 29 03:00:00 UTC 2008

เพิ่งทำของเล่นเสร็จไปตัวนึง เลยไม่ได้เขียน blog

ไม่ต้องพล่ามมาก เอาเลยดีกว่า

ใน Rails มี Form helper อยู่ เราทำอะไรกับมันได้บ้าง?? ลองดูแบบนี้ก่อน

  1
  2
  3
  4
  5
  6
<% form_for :person, @person, :url => { :action => "update" } do |f| %>
  First name: <%= f.text_field :first_name %>
  Last name : <%= f.text_field :last_name %>
  Biography : <%= text_area :person, :biography %>
  Admin?    : <%= check_box_tag "person[admin]", @person.company.admin? %>
<% end %>

ปกติ ผมจะต้องใส่ label ให้มันด้วย
ผมไม่ค่อยชอบเลย ผมอยากได้

f.text_field :first_name

แล้วมันใส่ label ไปให้ผมเลย
มันทำได้โดยสร้าง module เพิ่ม ไปใว้ใน config/initializers/ (มันมาตอน rails 2.0 ออกมั้ง ทุก file ในนี้ จะถูกโหลดโดยอัติโนมัติ)

  1
  2
  3
  4
  5
  6
  7
module MyFormHelper
  class MyFormBuilder < ActionView::Helpers::FormBuilder
    def text_field(method, options = {})
      @template.content_tag('p', label(method) + <br /> + super)
    end
  end
end

ก็ extends ตามเรื่องไป(ต้องใช้พลังแงะนิดหน่อย)

ใน form ด้านบน ก็เพิ่ม :builder => MyFormHelper::MyFormBuilder
หน้าตาจะเป็นแบบนี้

  1
  2
  3
  4
  5
  6
<% form_for :person, @person, :url => { :action => "update" }, :builder => MyFormHelper::MyFormBuilder do |f| %>
  <%= f.text_field :first_name %>
  <%= f.text_field :last_name %>
  <%= text_area :person, :biography %>
  <%= check_box_tag "person[admin]", @person.company.admin? %>
<% end %>

แล้วผมก็จะได้ผลของการ render text_field เป็นแบบนี้

  1
  2
<p><label for="person_first_name">First name</label><br />
<input type="text" id="person_first_name" name="person[first_name]"</p>

อะไรประมาณนี้

0 comments | Filed Under: Ruby on Rails | Tags: helper

codegent: we're hiring