Rails x Ajax로 스마트하게 '더 보기 기능' 구현
소개
index.js.erb
에 대해) 환경
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
$ rails -v
Rails 5.2.1
준비
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
$ rails -v
Rails 5.2.1
gem 'kaminari'
# seedを使うなら
gem 'seed-fu'
구현
모델
Dog
와 Cat
를 사용합니다만, 존재로 있으면 좋기 때문에 구현은 생략합니다. seed-fu
라든가를 사용해, DB에 미리 페이지네이션용의 인스턴스를 만들어 둡시다. 컨트롤러
sample#index
액션으로 합니다. guard
( return unless request.xhr?
)로 멈추므로 인스턴스 변수를 받고 페이지를 렌더링하면됩니다. guard
를 통과하고 params[:type]
마다 다른 JS 파일을 실행합니다. class SampleController < ApplicationController
def index
@dogs = Dog.all.page(params[:page]).per(1)
@cats = Cat.all.page(params[:page]).per(1)
# これ以下はAjax通信の場合のみ通過
return unless request.xhr?
case params[:type]
when 'dog', 'cat'
render "sample/#{params[:type]}"
end
end
end
보기
app/views/sample/
├── _cat.html.slim
├── _dog.html.slim
├── cat.js.erb
├── dog.js.erb
└── index.html.slim
Slim
를 사용하고 있지만 JS 파일을 작성할 때는 Erb
로 작성하는 것이 좋습니다. (조사하면 알겠지만 매우 그리기 어렵다‥‥) Slim
사용해도, 확장자에 erb
라고 붙이면 움직여 주므로 매우 살아 있습니다! HTML 포맷 측
/ index.html.slim
.container.my-5
.row
.col-md-6
#dog-list
= render partial: 'sample/dog', collection: @dogs
= link_to_next_page @dogs, 'もっと見る', id: 'more-dog', class: 'btn btn-light w-100', params: { type: :dog }, remote: true
.col-md-6
#cat-list
= render partial: 'sample/cat', collection: @cats
= link_to_next_page @cats, 'もっと見る', id: 'more-cat', class: 'btn btn-light w-100', params: { type: :cat }, remote: true
/ _cat.html.slim, _dog.html.slim (cat -> dogに書き換えるだけ)
.border.mb-1
p cat
大元のDivタグ
에 ユニークなID
를 부여합니다. link_to_next_page
메서드에 ユニークID
및 typeパラメーター
를 부여합니다. JS포맷측
/ cat.js.erb, dog.js.erb (cat -> dogに書き換えるだけ)
$('#more-cat').remove();
$('#cat-list').append("<%= j render partial: 'sample/cat', collection: @cats %>")
$('#cat-list').append("<%= j link_to_next_page(@cats, 'もっと見る', id: 'more-cat', class: 'btn btn-light w-100', params: { type: :cat }, remote: true) %>")
결론
Reference
이 문제에 관하여(Rails x Ajax로 스마트하게 '더 보기 기능' 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Coolucky/items/bde74b020b8d37ccf426텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)