포인트 기능・레벨 업 기능 받은 좋아하는 수를 마이 페이지로 표시시키고 싶다! 비동기 통신이 좋다.

13447 단어 초보자루비Rails

처음에



포인트 기능이라고 할까 레벨업 기능이라고 할까・・・
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이라든가 그러한 기술을 하면,
레벨 업 기능도 될까 ~라고 생각합니다! ! !

획득한 좋아하는 숫자를 그래프로 하고 싶은 분은 이하의 기사로부터

좋은 웹페이지 즐겨찾기