Rails + jQuery 이벤트 발화로 부분 템플릿을 업데이트하는 방법
소개
증분 검색에 대해 쓴 기사 에서는 ajax와 json의 조합을 사용해 뷰를 변화시키고 있었습니다만, 이번은 json을 사용하지 않고 Rails의 부분 템플릿을 갱신시키는 방법으로 뷰를 변경하는 방법에 대해 나름대로 정리해 갑니다.
환경
Ruby 2.5.1
Rails 6.0.2
haml, jQuery를 사용합니다.
하고 싶은 일
form_with의 submit을 사용하지 않고, js의 이벤트 발화(click이나 change등)에 의해 비동기 통신으로 부분 템플릿을 갱신시키고 싶습니다.
json을 활용하여 업데이트하는 방법도 있지만, 여기에서는 부분 템플릿을 활용하여 js 내의 설명을 간략화시켜 나갑니다.
우선 submit을 사용했을 때의 갱신
post_controller.rb
class PostController < ApplicationController
def index
@posts = Post.all
end
def create
@post = Post.create(message: params[:message])
@posts = Post.all
render partial: "post", collection: @posts
end
end
index.html.haml
%h2
Posts
= form_with model: @post do |f|
= f.text_field :message
= f.submit "Post", id: :submit
.posts
= render partial: "post", collection: @posts
_post.html.haml
= post.message
우선 비교로서 js를 사용하지 않고 갱신해 보겠습니다.
결과
부분 템플릿 만 업데이트하는 대신 전체 페이지를 부분 템플릿으로 변경했습니다.
부분 템플릿만 업데이트
post_controller_rb
class PostController < ApplicationController
def index
@posts = Post.all
end
def create
@post = Post.create(message: params[:message])
@posts = Post.all
# partial: "post", collection: @posts <- 削除
end
end
create.js.haml(신규 작성)
$('.posts').html("#{j(render partial: "post", collection: @posts)}");
결과
부분 템플릿만 업데이트할 수 있었습니다.
주제 submit에서 전송하는 대신 js 이벤트에서 부분 템플릿을 업데이트합니다.
post.js
$(function() {
$('#submit').on('click', function(event) {
event.preventDefault();
var input = $('#message').val();
console.log(input)
$.ajax({
type: "POST",
url: "/post",
data: {message: input}
})
.done(function(response) {
$('.posts').html(response);
})
})
})
post_controller.rb
class PostController < ApplicationController
def index
@posts = Post.all
end
def create
@post = Post.create(message: params[:message])
@posts = Post.all
render partial: "post", collection: @posts <- 復元
end
end
서버가 반환하는 데이터 형식을 지정하지 않으면 표준 HTML로 작성된 부분 템플릿 정보가 반환되는 것 같습니다.
결과
js로 갱신시키는 부분에 ajax 통신으로 돌려주어진 데이터를 치환시키는 것으로 부분 템플릿의 갱신을 실현할 수 있었습니다.
활용할 수 있을 것 같은 장면
마우스 오버와 조합해 마우스의 위치에 의해 뷰를 갱신시키거나, 일시적으로 처리를 정지시키거나 하는 js와의 조합으로 활용할 수 있을 것 같습니다.
Reference
이 문제에 관하여(Rails + jQuery 이벤트 발화로 부분 템플릿을 업데이트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iiyama_makoto/items/f6b39737d47ea1e19239텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)