포인트 기능・레벨 업 기능 받은 좋아하는 수를 마이 페이지로 표시시키고 싶다! 비동기 통신이 좋다.
처음에
포인트 기능이라고 할까 레벨업 기능이라고 할까・・・
Qiita에서도 기여가 늘어나면 동기 부여로 이어지므로
그런 기능을 만들고 싶었습니다.
그런 이유로, 자신의 기사에 붙은 좋아하는 수를 마이 페이지로 낼 수 있도록 해 갑니다! !
하는 방법은 통지 기능과 닮았다고 느꼈습니다.
(TEU라고 하는 것은, 컨테이너의 세는 방법입니다.매니악···)
김에 이런 것도 만들 수 있습니다!
마이그레이션 파일, 모델 파일 작성
00000000_create_points.rb
class CreatePoints < ActiveRecord::Migration[5.2]
def change
create_table :points do |t|
t.integer :giver_id, null: false
t.integer :getter_id, null: false
t.integer :post_id, null: false
t.timestamps
end
end
end
/app/models/point.rb
class Point < ApplicationRecord
belongs_to :post
belongs_to :giver, class_name: 'User', foreign_key: 'giver_id', optional: true
belongs_to :getter, class_name: 'User', foreign_key: 'getter_id', optional: true
scope :created_today, -> { where(created_at: Time.zone.now.all_day) }
scope :created_yesterday, -> { where(created_at: 1.day.ago.all_day) }
scope :created_2days_ago, -> { where(created_at: 2.days.ago.all_day) }
scope :created_3days_ago, -> { where(created_at: 3.days.ago.all_day) }
scope :created_4days_ago, -> { where(created_at: 4.days.ago.all_day) }
scope :created_5days_ago, -> { where(created_at: 5.days.ago.all_day) }
scope :created_6days_ago, -> { where(created_at: 6.days.ago.all_day) }
scope :created_today
등에 관한 기사user.rb
# ポイント ポイント与える側、もらう側で2通り
has_many :active_points, class_name: 'Point', foreign_key: 'giver_id', dependent: :destroy
has_many :passive_points, class_name: 'Point', foreign_key: 'getter_id', dependent: :destroy
①포인트를 보내는 유저와,
②포인트를 받는 유저의 2종류이므로 이렇게 나누어 정의합니다.
이번에는 active_points
passive_points입니다. 각각 나누어 쓰고 있지만,
결국은 Point와의 어소시에이션이므로,
class_name: 'Point', 를 붙여 줍니다.
post.rb
has_many :points, dependent: :destroy
컨트롤러에서 좋아요가 켜지면 포인트가 쌓이게합니다.
controllers/favorite_controller.rb
def create
post = Post.find(params[:post_id])
favorite = current_user.favorites.new(post_id: post.id)
favorite.save
@post = Post.find(params[:post_id])
unless @post.user == current_user
@post.point_by(current_user)
end
end
이미 작성된 좋아하는 기능에 덧붙였습니다! (자신의 기사에 「좋아요」하는 것은 OK로 하고 있습니다)
다만, 자신의 기사에 「좋아요」를 해도 포인트는 모이지 않게 하고 있습니다! ! !
또, 「좋아요」를 제외해도, 포인트는 줄이지 않게 하고 있습니다.
(감소하는 것은 슬프기 때문에!)
모델 파일로 포인트 저장
컨트롤러에서 @post.point_by(current_user)로,
current_user를 인수로 전달되었습니다.
post.rb
# ポイントの
def point_by(current_user)
point = current_user.active_points.new(
post_id: id,
getter_id: user_id
)
point.save if point.valid?
end
여기서 깨달았지만, giver_id 어디에도 사용하지 않는다・・・라고 하는 것입니다. .
필요 없었어 아라고 생각해, 마이그레이션 파일이나,
어소시에이션 지우면 움직이지 않게 되었습니다. .
giver있는 getter이기 때문입니까?
내 페이지에 표시
users_controller.rb
def show
@user = User.find(params[:id])
@posts = @user.posts.where(status: true).order('created_at DESC').page(params[:page]).per(20)
@point = @user.passive_points.all
@posts_tag = @user.tags.order('created_at DESC').limit(15)
end
app/views/users/show.html.erb
<strong><%= @point.length %></strong> TEU</h3>
이상입니다! !
좋아요 포인트가 10이 되면 Level1이라든가 그러한 기술을 하면,
레벨 업 기능도 될까 ~라고 생각합니다! ! !
획득한 좋아하는 숫자를 그래프로 하고 싶은 분은 이하의 기사로부터
Reference
이 문제에 관하여(포인트 기능・레벨 업 기능 받은 좋아하는 수를 마이 페이지로 표시시키고 싶다! 비동기 통신이 좋다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ki_87/items/c105fd2661b5f25836ea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)