【Rails】redirect_나는 to와render의 차이를 조사했다.
7032 단어 renderRubyRailsredirect_to
결론
【render】
컨트롤러에서 지정한view를 직접 호출합니다.
운동: controller → view
데이터 상태 그대로 화면 붙여넣기
【redirect_to】
http 요청을 받았을 때와 같은 처리
동작: controller → URL → route → controller → view
처음부터 지정된 URL에 액세스하여 모든 데이터를 다시 가져옵니다.
실제로 해봤어요.
① 일반적인 컨트롤러 파일의create 동작으로 동작을 관찰
tasks_controller.rb
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path, notice: "タスクを作成しました"
else
render :new
end
end
인증이 걸리고 저장되지 않도록 작업 이름이 비어 있습니다.그런 다음 작업 만들기 를 누릅니다.
저장되지 않았습니다. "render:new"를 실행했습니다.입력한 데이터는 그대로 유지됩니다.
② render를 redirect로 대체해 보십시오.Prefix의 render와 동일합니다. new.html.호출erb를 지정합니다.
tasks_controller.rb
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path, notice: "タスクを作成しました"
else
redirect_to new_task_path #render を redirect_to に置き換えた
end
end
이번에도 일부러 빈 칸으로 작업 이름을 저장했다.작업 만들기를 누릅니다.
입력한 부분이 모두 빈 칸으로 변했다.이번 시험은 글자 수가 적어 문제없지만, 글자 수가 많은 블로그에 투고하려다 오류가 발생하면 쓴 글이 수포로 돌아간다.
이것은 어떤 어려움이 발생했을 때의 Rails 가이드입니다.
Rails Guide 설명
render 및redirect_to, Rails Guide의 설명은 다음과 같습니다.
Rails Guide 레이아웃 및 렌더링 2.3redirect_사용
render는 응답을 설정할 때 사용할 보기 (또는 다른 자원) 를 지정합니다.redirect_to 방법은 이 점에서 렌더 방법과 근본적으로 다르다.redirect_to 메서드는 브라우저에 명령을 보내기 위해 다른 URL로 요청을 다시 보내는 것입니다.
Rails Guide 레이아웃 및 렌더링 2.3.2 render 및 redirect_차이
redirect_to를 실행하면 코드가 거기에서 실행을 끝내고 브라우저에서 다음 요청 (정상 대기 상태) 을 기다립니다.그리고redirect_to에서 브라우저로 전송되는 HTTP 상태 코드 302에 따라 브라우저에서 서버로 다른 URL로 요청이 전송되고 서버는 이 요청을 다시 처리합니다.그 외에 나는 가지 않았다.
좀 이해가 안 돼...
다른 이쪽의 보도도 참고할 만하다. 나는 무슨 일이 일어났는지 안다.
render와redirect의 차이
render는 입력한 내용을 유지하면서 지정한view를 호출하여 화면을 다시 붙입니다.redirect_to http 요청을 다시 요청하고route와 controller를 통해 지정한view를 다시 호출합니다.
겸사겸사 말씀드리지만, 제가 또 하나 시도했습니다.
③ redirect_to를 렌더링해 보세요.
작업을 저장한 후 index 작업으로 이동합니다.
tasks_controller.rb
def create
@task = Task.new(task_params)
if @task.save
render :index
else
render :new
end
end
이번에는 작업을 저장하기 위해 작업 이름을 포함한 모든 항목을 입력합니다.작업 만들기 를 누릅니다.
오류가 발생했습니다.인덱스입니다.html.eb의 실례 변수@task에 아무런 내용이 없기 때문일 수 있습니다.@task 컨트롤러의 index 조작으로 생성됩니다.지정한view를 호출해야 하지만 컨트롤러의 index 작업을 거치지 않았기 때문에 실례 변수를 만들지 않았다는 것이다.그래서 오류가 발생했을 수도 있다.
다른 한편,redirect_to를 사용해 보시면.
tasks_controller.rb
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path
else
render :new
end
end
저장할 항목을 모두 입력합니다.작업 만들기를 누릅니다.
작업이 저장되어 index 보기로 이동합니다.
Reference
이 문제에 관하여(【Rails】redirect_나는 to와render의 차이를 조사했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HIROKOBA/items/d4147bff1c766e0dabaf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)