Rails에서 좋아하는 기능의 Ajax 처리를 구현해 보았습니다.
소개
Rails에서 좋아하는 기능을 구현하고 있었습니다만, 이 기능을 사용하면 아래와 같은 문제가 발생하고 있었습니다.
따라서 Ajax 기능을 추가하고 페이지 전환을 수반하지 않도록 하여 사용성을 올리려고 했습니다.
최초로 생각한 구현 방법은, JavaScript·jQuery를 사용해, Ajax 처리를 발화해 나가는 방법이 베스트일까라고 생각했습니다만, 조사해 가면, Rails에는,
link_to
등의 메소드에 remote: true
을 인수 에서 붙이면 Ajax 처리를 사용할 수 있게 된다는 것이었습니다. 처음 생각했던 구현 방법과 달리 간결했기 때문에 바로 그 방법으로 구현해 보았습니다.전제
환경 및 버전
구현
우선, app/views/posts/show.html.erb
에 좋아요 버튼 app/views/likes/_like.html.erb
을 render
시킵니다.
app/views/posts/show.html.erb# ・・・省略
<div class="post-like mr-auto">
<%= render partial: 'likes/like', locals: { post: @post, like: @like } %>
</div>
# ・・・省略
좋아요 기능의 delete
및 post
인수에 remote: true
을 추가하여 Ajax 기능을 추가합니다.
app/views/likes/_like.html.erb<% if current_user.already_liked?(post) %>
<%= link_to 'Like', post_like_path(post, like), method: :delete, class:'post-like__cancel', remote: true %>
<% else %>
<%= link_to 'Like', post_likes_path(post), method: :post, class:'post-like__enable', remote: true %>
<% end %>
추가하면 각각의 링크를 누른 후 아래의 처리를 실행할 수 있게 됩니다.
# ・・・省略
<div class="post-like mr-auto">
<%= render partial: 'likes/like', locals: { post: @post, like: @like } %>
</div>
# ・・・省略
<% if current_user.already_liked?(post) %>
<%= link_to 'Like', post_like_path(post, like), method: :delete, class:'post-like__cancel', remote: true %>
<% else %>
<%= link_to 'Like', post_likes_path(post), method: :post, class:'post-like__enable', remote: true %>
<% end %>
delete
방법 → app/views/likes/destroy.js.erb
파일 실행 post
방법 → app/views/likes/create.js.erb
파일 실행 그런 다음
js.erb
파일은 다음 코드와 같이 @post
및 @like
과 같은 Controller
메서드에 정의된 인스턴스 변수를 사용할 수 있습니다. 이것은 편리합니다.app/views/likes/destroy.js.erb
$('.post-like').html('<%= j(render partial: 'likes/like', locals: { post: @post, like: @like }) %>');
app/views/likes/create.js.erb
$('.post-like').html('<%= j(render partial: 'likes/like', locals: { post: @post, like: @like }) %>');
할 수있는 것
할 수 있는 것은 아래와 같습니다.
페이지 전환 없이 움직이는 것을 확인할 수 있었습니다.
상기의 구현으로 동작하지 않는 경우
작동하지 않는 원인은 View에서 jQuery를 사용할 수 없다는 것을 생각할 수 있으므로 아래의 구현이 되어 있는지 확인합시다.
참고: jQuery and $ not defined in like.js.erb returned from AJAX call
app/javascript/packs/application.js// Enable jQuery in the .js.erb file
global.$ = jQuery;
config/webpack/environment.js
//jQuery & Bootstap's JavaScript
const webpack = require('webpack')
environment.plugins.prepend(
'Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery', //<= 記述されているか確認
Popper: 'popper.js'
})
)
사이고에게
그 밖에도 응용해, 팔로우 기능이나 코멘트도 실장할 수 있었습니다.
앞으로는 검색 기능도 만들어 가므로 Ajax도 사용해 나갈 것입니다.
참고 기사
Rails에서 remote : true와 js.erb를 사용하여 Ajax (비동기 통신)를 쉽게 구현하십시오! (좋아하는 기능의 데모 포함)
jQuery and $ not defined in like.js.erb returned from AJAX call
Reference
이 문제에 관하여(Rails에서 좋아하는 기능의 Ajax 처리를 구현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jungissei/items/1b81be63ab4e1cc0b37b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
작동하지 않는 원인은 View에서 jQuery를 사용할 수 없다는 것을 생각할 수 있으므로 아래의 구현이 되어 있는지 확인합시다.
참고: jQuery and $ not defined in like.js.erb returned from AJAX call
app/javascript/packs/application.js
// Enable jQuery in the .js.erb file
global.$ = jQuery;
config/webpack/environment.js
//jQuery & Bootstap's JavaScript
const webpack = require('webpack')
environment.plugins.prepend(
'Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery', //<= 記述されているか確認
Popper: 'popper.js'
})
)
사이고에게
그 밖에도 응용해, 팔로우 기능이나 코멘트도 실장할 수 있었습니다.
앞으로는 검색 기능도 만들어 가므로 Ajax도 사용해 나갈 것입니다.
참고 기사
Rails에서 remote : true와 js.erb를 사용하여 Ajax (비동기 통신)를 쉽게 구현하십시오! (좋아하는 기능의 데모 포함)
jQuery and $ not defined in like.js.erb returned from AJAX call
Reference
이 문제에 관하여(Rails에서 좋아하는 기능의 Ajax 처리를 구현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jungissei/items/1b81be63ab4e1cc0b37b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Rails에서 remote : true와 js.erb를 사용하여 Ajax (비동기 통신)를 쉽게 구현하십시오! (좋아하는 기능의 데모 포함)
jQuery and $ not defined in like.js.erb returned from AJAX call
Reference
이 문제에 관하여(Rails에서 좋아하는 기능의 Ajax 처리를 구현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jungissei/items/1b81be63ab4e1cc0b37b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)