เพิ่งทำของเล่นเสร็จไปตัวนึง เลยไม่ได้เขียน 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> |
อะไรประมาณนี้