система голосования за блог rails с разработкой логина перед голосованием - PullRequest
0 голосов
/ 05 сентября 2018

Итак, у меня есть блог, который я пытаюсь использовать для постов. Я разработал и создал все ассоциации между моделями, голосованиями, пользователями и home_blogs.

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_many :liked_home_blogs, through: :votings
end

class HomeBlog < ApplicationRecord
  mount_uploader :image, ImageUploader
  has_many :hashtaggings
  has_many :hashtags, through: :hashtaggings
  has_many :votings
  has_many :votants, through: :votings

  def all_hashes=(names)
    self.hashtags = names.split(",").map do |name|
      Hashtag.where(name: name.strip).first_or_create!
    end
  end

  def all_hashes
    self.hashtags.map(&:name).join(", ")
  end
end

class Voting < ApplicationRecord
  belongs_to :home_blog
  belongs_to :user 
end

и контроллер выглядит следующим образом:

class VotingsController < ApplicationController

  before_action :authenticate_user!

def upvote
    @votings = HomeBlog.find(params[:home_blog_id])
    @votings.votings.build( :upvote => true, :downvote => false, 
:user_id => current_user.id)
    @votings.save!
      redirect_to request.referrer, notice: "Thanks for the 
 vote!"
 end



     def downvote
        @voting = HomeBlog.find(params[:home_blog_id])
        @voting.votings.build( :downvote => true, :upvote => 
    false, :user_id => current_user.id)
        @voting.save!
          redirect_to request.referrer, notice: "Thanks for the 
    vote!"
      end
private 

def voting_params
          params.require(:voting).permit(:upvote, :downvote, 
     :home_blog_id, :user_id)
 end

end

Извините за дрянное копирование и вставку для контроллера. У меня вопрос, как я могу сделать условие для current_user в разработке, чтобы ограничить их одним голосом за сообщение home_blog? Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

Я думаю, что вы добавили бы многоколонный уникальный индекс в таблицу соединений. Что-то вроде ...

add_index :voting, [:user_id, :home_blog_id], unique: true

Если я правильно понимаю ваш вопрос, вы бы хотели, чтобы была только одна запись голосования для home_blog за current_user (user_id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...