form_for, form_tag의 차이점은 무엇입니까?


80

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

답변:


63

특정 모델에는 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 -%>

53

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


1
@WowBow 당신이 맞아요; 결국이 답변은 꽤 오래되었으며 Prototype은 오래 전에 레일에서 제거되었습니다. 내 대답을 편집하겠습니다.
giorgian

form_forActiveRecord 개체 를 "선호" 한다는 것은 무엇을 의미 합니까?
shiggity

1
@shiggity : 물론 기호 나 문자열도 허용합니다. 그러나 ActiveRecord 개체가 주어지면 올바른 작업을 수행합니다.
giorgian

4

다음과 유사해야합니다.

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

과:

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

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


짧고 정확합니다. [아름다운 속죄]
덴마크어 Absar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.