12/08/2018, 15:00

form_for trong rails

form_for là một phương thức trong helper để tạo ra đoạn mã html nhằm mục đích xây dựng thẻ <form></form> ví dụ: <%= form_for :person do |f| %> First name: <%= f.text_field :first_name %><br /> Last name : <%= f.text_field :last_name %><br /> ...

form_for là một phương thức trong helper để tạo ra đoạn mã html nhằm mục đích xây dựng thẻ <form></form> ví dụ:

<%= form_for :person do |f| %>
  First name: <%= f.text_field :first_name %><br />
  Last name : <%= f.text_field :last_name %><br />
  Biography : <%= f.text_area :biography %><br />
  Admin?    : <%= f.check_box :admin %><br />
  <%= f.submit %>
<% end %>
  • tham số đầu tiên chuyền vào form_for là một record, có thể là một biến instance sinh ra từ trong controller @user nó sẽ thông qua biến đó để set action cho form_for

  • có thể set controller và action thủ công bằng cách sử dụng:

    <%= form_for :user, url: {action: :index, controller: :statics} do |f|%>
    <%= f.text_field :name %>
    <% end %>
    
  • chúng ta có thể set lại method truyền lên của một form bằng thuộc tính method: :<tên mothed> trong thẻ form_for ví dụ:

    <%= form_for :user, url: {action: :index, controller: :statics}, method: :patch do |f|%>
    <%= f.text_field :name %>
    <% end %>
    
  • nhìn code trên, biến f đưa ra một khối đối thuộc FormBuiler hiện thực hóa đối tượng model :person, đối tượng mà được truyền vào form_for

  • từ biến f có thể sử dụng các phương thức FormHelper để tạo ra các thẻ input, checkbox,...

    • tạo thẻ input text:

      <%= f.text_field :first_name %><br /> 
      
    • tạo thẻ input password:

      <%= f.password_field :first_name %><br /> 
      
    • tạo thẻ checkbox:

      <%= f.check_box :paid %>
      
    • thẻ cực kỳ quan trong đó là submit

      <%= f.submit "login" %>
      

    ...còn rất nhiều thuộc tính nữa

    • nếu muốn thêm các id, class cho các thẻ input chỉ cần thêm thuộc tính id: "abc", class: "abc"
      <%= f.text_field :first_name,  id: "abc", class: "abc" %><br /> 
      
    • cách bắt các biến do form gửi lên trong controller:
      • ta có thể sử dụng params để lấy thông tin truyền lên ví dụ:
        • đối với record là **:session **và field có name là :email => params[:session][:email]
        • còn đối với biến là instance thì dùng ta sẽ gọi trường truyền vào symbol đầu tiền là trùng với tên của biến đó: @user => params[:user][:email] còn rất nhiều điều thú vị về form_for khác, bạn có thể xem tại đây: http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for
0