티스토리 뷰
- 폼 헬퍼
폼헬퍼는 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 %>
- 주로 모델을 참조하지 않는, 일반적인 입력 방식에 대해 데이터를 전송할 때 활용됩니다.
- 대표적인 활용 예시로 검색창 입니다.
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태그를 실제로 개발자도구를 통해 들여다보면 다음과 같이 보여집니다.
더불어 과거에는 HTML의 <form> 태그 및 form_tag 내 데이터를 다른 액션으로 전달하면
위와같이 전달이 되었었습니다.
그래서 컨트롤러 내 액션에서 데이터를 받을 땐
def create
Post.create(title: params[:crud_title], content: params[:crud_content])
redirect_to posts_index_path
end
위와같이 받으면 됐습니다.
하지만 form_for로 감싸진 데이터를 전달을 하게되면
위와같이 모델 객체 안에 또 다시 감싸진 채로 전달됩니다.
그리고 컨트롤러 내 애션에서 데이트를 받을 떈
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
'프로그래밍 공부 > Ruby on Rails : 이론' 카테고리의 다른 글
Ruby on Rails : assets, public 폴더 개념 (0) | 2019.11.01 |
---|---|
Ruby on Rails : Restful API (2) | 2019.11.01 |
Ruby on Rails : 뷰 헬퍼 (View Helper) (0) | 2019.11.01 |
Ruby on Rails : 라우터 헬퍼, URI (0) | 2019.11.01 |
Ruby on Rails : Console 활용하기 (2) | 2019.11.01 |