티스토리 뷰

  • 폼 헬퍼

폼헬퍼는 view에서만 쓰이는 문법입니다.

그동안 form 태그가 HTML 태그로 표현이 되었다면, 이제는 Rails 방식으로 작성이 된다고 보면 됩니다.

또한, 일반적인 form 태그와 차이점이 몇 가지 존재합니다.

 

사실 언제나 첫 문법을 배울 땐 어렵고, 효율성이 떨어질거라고 예상을 하는데, 나중에 레일즈에서는 모듈을 활용할 때 HTML 문법으로 작성되기 보단 폼 헬퍼 문법으로 작성이 되다보니 미래에 코드를 읽을 때 있어 오히려 익숙하지 않아가지고 큰 어려움을 겪게될 수 있습니다..

 

 

  • 폼 헬퍼, 넌 무엇이 다르냐

CSRF 방지 토큰 자동 삽입

과거에 MVC 패턴을 활용한 CRUD 실습[클릭] 때 저희는 POST 방식으로 데이터를 전달할 때 다음 코드를 썼었습니다.

<%= hidden_field_tag :authenticity_token, form_authenticity_token %>

그 이유는 기존의 POST 방식 데이터 통신에 있어 보안적인 이슈 때문이었습니다.

그런데 Form 헬퍼를 쓰면 재밌게도 자동으로 CSRF 방지토큰이 생성이 됩니다.

 

 

  • 폼 헬퍼 종류

폼헬퍼는 크게 form_tag, form_for, form_with 가 존재합니다.

해당 글에서는 form_tag와 form_for 만을 다룹니다.

 

1) form_tag

<%= form_tag(posts_search_path, method: "get") do %>
    …
<% end %>
  • 주로 모델을 참조하지 않는, 일반적인 입력 방식에 대해 데이터를 전송할 때 활용됩니다.
  • 대표적인 활용 예시로 검색창 입니다.

실제 form_tag 사용 예시 : http://damda.info 페이지 내 검색창

 

2) form_for

class PostsController < ApplicationController
  def new
    @postNew = Post.new
  end
end
<%= form_for @postNew, url: {action: "create"}, html: {class: "..."} do |f| %>
  <div>제목</div>
  <%= f.text_field :title %>
  <div>내용</div>
  <%= f.text_field :content %>
  <%= f.submit "작성" %>
<% end %>
  • 특정 모델 덩어리(객체)를 처리할 때 쓰이는 헬퍼
  • form_for을 사용할 땐 모델의 참조가 필요합니다.

더불어 form_for는 상속변수가 쓰입니다. 그리고 상속변수.text_field :에트리뷰트 규칙을 엄격히 지켜줘야 하니다.

form_for 및 form_for에 감싸진 input태그를 실제로 개발자도구를 통해 들여다보면 다음과 같이 보여집니다.

과거와는 다르게 좀 특이하게 정의된 name 속성

더불어 과거에는 HTML의 <form> 태그 및 form_tag 내 데이터를 다른 액션으로 전달하면

HTML <form>, form_tag Parameters

위와같이 전달이 되었었습니다.

그래서 컨트롤러 내 액션에서 데이터를 받을 땐

def create
  Post.create(title: params[:crud_title], content: params[:crud_content]) 
  redirect_to posts_index_path
end

위와같이 받으면 됐습니다.

 

하지만 form_for로 감싸진 데이터를 전달을 하게되면

form_for Parameters

위와같이 모델 객체 안에 또 다시 감싸진 채로 전달됩니다.

그리고 컨트롤러 내 애션에서 데이트를 받을 떈

def create
  Post.create(title: params[:post][:title], content: params[:post][:content]) 
  redirect_to posts_index_path
end

위와같이 받아야 합니다.

 

 

  • 결론

form_for을 세밀히 알으라고 까진 안하겠습니다.

하지만 그래도 form_for 란게 있구나 라는 거랑 form_for 보단 좀 자유로운 form_tag 에 대해서는 잘 알아뒀으면 좋겠습니다.

 

루비온 레일즈 Ruby on Rails ROR

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함