Rails에 사용자 추적 기능 설치(Ajax 사용)②
뭐 공부 해요?
이 보도는 이 보도의 후속이다.
▶ 지난번 보도
Rails에 사용자 추적 기능 설치(Ajax 사용)①
Rails 과제를 수행하고 있습니다.
User
추적 기능이전 글에서 이전 파일의 제작과 모델 파일의 관련에 대한 정의가 끝났기 때문에 이번에는
controller
과view
, 그리고 모델 방법을 추가할 것입니다.또한 실행 환경은 다음과 같다.
Rails 5.2.3
Ruby 2.6.0
종점
이번 결승점은 이런 느낌이다.버튼을 누르면 바삭바삭함과 동기화되지 않는 추적/추적 해제 버튼이 나타납니다.
규격
이 기능의 사용은 다음과 같다.
데이터 구조
또한 DB는 다음과 같이 설계되었습니다.
왜 이러는지 읽으세요저번 보도
비동기식 구현
우선 비동기식으로 설치합니다.
controller
, model
같이 쓰세요. 자세히 알고 싶으신 분들은 이 근처 기사를 보실 수 있습니다.controller
controller
의 기록은 다음과 같다.relationships_controller.rb
class RelationshipsController < ApplicationController
def create
@other_user = User.find(params[:follower])
current_user.follow(@other_user)
end
def destroy
@user = current_user.relationships.find(params[:id]).follower
current_user.unfollow(params[:id])
end
end
follow
,unfollow
은 모형 방법이다.이따가 설명할게요.view
뷰 파일 설명은 다음과 같습니다.또 꾸미기 위한 반은 생략했다.또한
user
(각자의 사용자)를 나타내는 변수는 여기에 표시된 코드에서 전달된다.view
- if logged_in? && current_user != user
- if current_user.following?(user)
= button_to 'フォロー解除', relationship_path(current_user.relationships.find_by(follower: user)), method: :delete
- else
= button_to 'フォロー', relationships_path(follower: user)
following?
도 모델 양말이다.model
user
모델의 모델 방법으로 각각 정의follow
,unfollow
,following?
방법.class User < ApplicationRecord
# 前回の記事で定義した部分
has_many :relationships, dependent: :destroy
has_many :followings, through: :relationships, source: :follower
has_many :passive_relationships, class_name: 'Relationship', foreign_key: 'follower_id', dependent: :destroy
has_many :followers, through: :passive_relationships, source: :user
# 今回追記したモデルメソッド
def follow(other_user)
return if self == other_user
relationships.find_or_create_by!(follower: other_user)
end
def following?(user)
followings.include?(user)
end
def unfollow(relathinoship_id)
relationships.find(relathinoship_id).destroy!
end
end
또 이 등급 위에는 이전 문장에서 적당한 복잡한 관련 있다.비비동기식 통신에서 구현 완료
지금까지 Ajax가 아닌 추적 기능을 완성했습니다.프레젠테이션용
redirect_to
으로 화면을 옮기기 때문에 약간 비동기적으로 보이지만 추적 단추를 눌러 화면을 다시 설치한 후 추적 해제 단추가 나타납니다.Ajax에서 구현
그럼, 우리는 이것을 비동기적인 통신으로 만들 것이다.이쪽도 깨끗하게 썼는데 왜 이런 사람이 됐는지 궁금하니 이쪽 기사를 보세요.
remote:true는 aax의 게시물을 켜서 자체 검사합니다.
html 섹션
먼저 단추 부분에
remote: true
옵션을 추가하여 부분으로 자릅니다.views/relationships/_follow_button.html.slim
= button_to 'フォロー', relationships_path(follower: user), remote: true
views/relationships/_unfollow_button.html.slim= button_to 'フォロー解除', relationship_path(current_user.relationships.find_by(follower: user)), method: :delete, remote: true
# もともとボタンのあったビューファイル
- if logged_in? && current_user != user
div id="follow-button-#{user.id}"
- if current_user.following?(user)
= render 'relationships/unfollow_button', user: user
- else
= render 'relationships/follow_button', user: user
**.js.erb 파일 만들기
동적 호출 부분의 파일을
**.js.erb
파일로 내보냅니다.views/relationships/create.js.erb
$("#follow-button-<%= @other_user.id %>").html("<%= j(render 'unfollow_button', user: @other_user) %>")
views/relationships/destroy.js.erb$("#follow-button-<%= @user.id %>").html("<%= j(render 'follow_button', user: @user) %>")
완성!
여기서 Ajax를 완성하면 보기 파일만 고치면 끝납니다
신푸르
감상
추적·추적 해제 기능, 데이터 구조 8할!이런 느낌, DB와 모델의 디자인이 굉장히 복잡하네요~
잘 읽어서 너무 좋아요 ^ ^
Reference
이 문제에 관하여(Rails에 사용자 추적 기능 설치(Ajax 사용)②), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanutanu/items/5f41ece86e9d2b70bae4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)