[ruby-on-rails] form_for, form_tag의 차이점은 무엇입니까?

form_for와 form_tag의 차이점은 무엇입니까? form_remote_for와 form_remote_tag가 다른가요?



답변

특정 모델에는 form_for를 사용합니다.

<% form_for @person do |f| %> # you can use f here

    First name: <%= f.text_field :first_name %>
    Last name : <%= f.text_field :last_name %>

<% end %>

Form_tag 기본 양식 생성,

<%= form_tag '/person' do -%>
  <%= text_field_tag "person", "first_name" %>
<% end -%>


답변

form_for첫 번째 인수로 activerecord 객체를 선호합니다. 양식을 쉽게 만들거나 편집 할 수 있습니다 ( “새”보기에서 사용하려면 다음과 같이 컨트롤러에서 빈 인스턴스를 만들어야합니다.

def new
  @foo = Foo.new
end

또한 양식 변수를 블록에 전달하므로 양식 자체 내에서 모델 이름을 반복 할 필요가 없습니다. 모델 관련 양식을 작성하는 데 선호되는 방법입니다.

form_tag단지 form 태그를 생성합니다 (물론, 같은 위조 방지 숨겨진 필드를 조용히 준비합니다 form_for). 모델이 아닌 양식에 가장 적합합니다 (실제로는 단순한 검색 양식 등에 대해서만 사용합니다).

이와 유사하게, form_remote_for그리고 form_remote_tag대신에 표준 HTTP 메소드로 끝나는의 모델 관련 서식에 적합 각각 관련 형태를 모델링하지 만 (GET은 POST는 …) 그들은 아약스 메서드를 호출합니다.

이 모든 것과 훨씬 더 많은 것을 FormHelper 에서 즐길 수 있습니다. PrototypeHelper 참조 페이지.

2012-07-13 수정

Prototyperails오래 전에 제거되었으며 원격 양식이 완전히 변경되었습니다. 및 :remote둘 다 옵션에 대한 재 가드와 함께 첫 번째 링크를 참조하십시오 .form_forform_tag


답변

다음과 유사해야합니다.

<% form_for @person do |f| %>
  <%= f.text_field :name %>
<% end %>

과:

<%= form_tag '/person' do %>
  <%= text_field_tag "person[name]" %>
<% end %>

컨트롤러에 동일한 매개 변수를 제출하려면이를 명시 적으로 정의해야합니다.


답변