[Rails]초학자가 form_with의 흐름을 정리하고 이해하기 위한 기사
소개
Rails 학습 초기에 form_with의 흐름을 이해할 수 없었기 때문에 정리합니다.
Rails5.2.4입니다.
먼저 정리
「빨리 정리해라!」라고 하는 분도 계실까라고 생각하므로, 먼저 흐름을 정리합니다.
간단히 설명
User 모델과 Post 모델이 있는 상황입니다.
①new액션으로 뷰 페이지(new.html.erb)를 표시
new 액션을 호출하라는 요청이 나오면, 먼저 post의 신규 게시(new) 페이지가 표시된다
※이미지
②new액션으로 생성하고 있다 @post
인스턴스를 뷰에 건네준다
post_controller.rbclass PostsController < ApplicationController
~~
def new
@post = Post.new #ここで生成されている@postが、new.html.erbに渡される
end
~~
③ 인스턴스 속성에 값을 입력하여 submit
④create 액션 호출
위의 이미지와 같이 投稿する
버튼 (form_with의 제출)을 클릭하면 form_with가 create 액션을 호출합니다.
※form_with 헬퍼 메소드는 , 건네받은 인스턴스(이 경우는 @post
)의 프로퍼티를 보고, create에 날까 update에 날릴지를 판단해 주는 편리한 아이입니다.
form_with가 생각하는 것- @post が空 → 初めて作るんだな!じゃあcreate!
- @post が空じゃない → 変更したいんだな!じゃあupdate!
⑤post_params 메소드 호출
post_controller.rbclass PostsController < ApplicationController
~~
def create
#createアクションが呼び出され、Post.create(post_params)が実行される→ post_paramsが呼び出される
Post.create(post_params)
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
end
~~
⑥params로 받은 값 중, permit로 받는 값을 지정(허가)
params에서 수신하는 값의 상태[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"oLGgLMTcqSPi7cbK9j1wFhH5rqiwXYO7GyRoZcZFZe6Y5VdbHrWCOyeo37kgW/bsl+eANQrz7p/lAzZMnAS8Gg==",
"post"=>{"title"=>"今日学んだこと", "content"=>"form_withは賢い子!"},
"commit"=>"投稿する", "exept"=>:index, "controller"=>"posts", "action"=>"create"} permitted: false>
보기 어렵기 때문에 본래 없는 위치에서 개행하고 있습니다만, 통상은 1행으로 돌아옵니다.
"post"=>{"title"=>"今日学んだこと", "content"=>"form_withは賢い子!"},
가 post_params
로 취급하는 값입니다.
permit
에서받은 값을 허용하지 않으면 의도하지 않은 값이 테이블에 저장 될 수 있으므로 지정이 거의 필수입니다.
⑦ post_params의 값으로 Post를 create(성공하면 테이블에 저장된다)
post_params 메소드로 반환된 값으로 Post.create 하게 되므로,
실질 아래와 같은 상태입니다.
def create
Post.create(title: "今日学んだこと", content: "form_withは賢い子!", user_id: 1)
redirect_to root_path
end
이 흐름을 확인한 후 다시 시작의 이미지를 보면 이해가 깊어진다고 생각합니다!
결론
form_tag, form_for와의 차이점은 이 기사에 요약되어 있습니다.
[Rails]haml에서 form_with/form_for/form_tag를 작성하는 방법
실수 등 있으면 지적해 주시면 다행입니다.
Reference
이 문제에 관하여([Rails]초학자가 form_with의 흐름을 정리하고 이해하기 위한 기사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sew_sou19/items/e9944904b50899fbb4cf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
「빨리 정리해라!」라고 하는 분도 계실까라고 생각하므로, 먼저 흐름을 정리합니다.
간단히 설명
User 모델과 Post 모델이 있는 상황입니다.
①new액션으로 뷰 페이지(new.html.erb)를 표시
new 액션을 호출하라는 요청이 나오면, 먼저 post의 신규 게시(new) 페이지가 표시된다
※이미지
②new액션으로 생성하고 있다 @post
인스턴스를 뷰에 건네준다
post_controller.rbclass PostsController < ApplicationController
~~
def new
@post = Post.new #ここで生成されている@postが、new.html.erbに渡される
end
~~
③ 인스턴스 속성에 값을 입력하여 submit
④create 액션 호출
위의 이미지와 같이 投稿する
버튼 (form_with의 제출)을 클릭하면 form_with가 create 액션을 호출합니다.
※form_with 헬퍼 메소드는 , 건네받은 인스턴스(이 경우는 @post
)의 프로퍼티를 보고, create에 날까 update에 날릴지를 판단해 주는 편리한 아이입니다.
form_with가 생각하는 것- @post が空 → 初めて作るんだな!じゃあcreate!
- @post が空じゃない → 変更したいんだな!じゃあupdate!
⑤post_params 메소드 호출
post_controller.rbclass PostsController < ApplicationController
~~
def create
#createアクションが呼び出され、Post.create(post_params)が実行される→ post_paramsが呼び出される
Post.create(post_params)
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
end
~~
⑥params로 받은 값 중, permit로 받는 값을 지정(허가)
params에서 수신하는 값의 상태[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"oLGgLMTcqSPi7cbK9j1wFhH5rqiwXYO7GyRoZcZFZe6Y5VdbHrWCOyeo37kgW/bsl+eANQrz7p/lAzZMnAS8Gg==",
"post"=>{"title"=>"今日学んだこと", "content"=>"form_withは賢い子!"},
"commit"=>"投稿する", "exept"=>:index, "controller"=>"posts", "action"=>"create"} permitted: false>
보기 어렵기 때문에 본래 없는 위치에서 개행하고 있습니다만, 통상은 1행으로 돌아옵니다.
"post"=>{"title"=>"今日学んだこと", "content"=>"form_withは賢い子!"},
가 post_params
로 취급하는 값입니다.
permit
에서받은 값을 허용하지 않으면 의도하지 않은 값이 테이블에 저장 될 수 있으므로 지정이 거의 필수입니다.
⑦ post_params의 값으로 Post를 create(성공하면 테이블에 저장된다)
post_params 메소드로 반환된 값으로 Post.create 하게 되므로,
실질 아래와 같은 상태입니다.
def create
Post.create(title: "今日学んだこと", content: "form_withは賢い子!", user_id: 1)
redirect_to root_path
end
이 흐름을 확인한 후 다시 시작의 이미지를 보면 이해가 깊어진다고 생각합니다!
결론
form_tag, form_for와의 차이점은 이 기사에 요약되어 있습니다.
[Rails]haml에서 form_with/form_for/form_tag를 작성하는 방법
실수 등 있으면 지적해 주시면 다행입니다.
Reference
이 문제에 관하여([Rails]초학자가 form_with의 흐름을 정리하고 이해하기 위한 기사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sew_sou19/items/e9944904b50899fbb4cf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class PostsController < ApplicationController
~~
def new
@post = Post.new #ここで生成されている@postが、new.html.erbに渡される
end
~~
- @post が空 → 初めて作るんだな!じゃあcreate!
- @post が空じゃない → 変更したいんだな!じゃあupdate!
class PostsController < ApplicationController
~~
def create
#createアクションが呼び出され、Post.create(post_params)が実行される→ post_paramsが呼び出される
Post.create(post_params)
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
end
~~
[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"oLGgLMTcqSPi7cbK9j1wFhH5rqiwXYO7GyRoZcZFZe6Y5VdbHrWCOyeo37kgW/bsl+eANQrz7p/lAzZMnAS8Gg==",
"post"=>{"title"=>"今日学んだこと", "content"=>"form_withは賢い子!"},
"commit"=>"投稿する", "exept"=>:index, "controller"=>"posts", "action"=>"create"} permitted: false>
def create
Post.create(title: "今日学んだこと", content: "form_withは賢い子!", user_id: 1)
redirect_to root_path
end
form_tag, form_for와의 차이점은 이 기사에 요약되어 있습니다.
[Rails]haml에서 form_with/form_for/form_tag를 작성하는 방법
실수 등 있으면 지적해 주시면 다행입니다.
Reference
이 문제에 관하여([Rails]초학자가 form_with의 흐름을 정리하고 이해하기 위한 기사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sew_sou19/items/e9944904b50899fbb4cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)