Rails - Empêcher les utilisateurs de se suivre
-
20-12-2019 - |
Question
J'ai un système suivant et j'aimerais restreindre l'action du contrôleur des utilisateurs « suivre » si le params[:id]
est le même que l'utilisateur actuel.
J'utilise cancancan (un joyau cancan à jour) pour effectuer mon travail d'autorisations.
contrôleurs/utilisateurs_controller.rb
def follow
Followership.create(leader_id: params[:id], follower_id: current_user.id)
...
end
modèles/utilisateur.rb
class User < ActiveRecord::Base
has_many :followers, :class_name => 'Followership', dependent: :destroy
has_many :followed_by, :class_name => 'Followership', dependent: :destroy
...
end
modèles/suivi.rb
class Followership < ActiveRecord::Base
belongs_to :leader, :class_name => 'User'
belongs_to :follower, :class_name => 'User'
...
end
La solution
Ajoutez une validation sur votre Followship
modèle:
class Followership < ActiveRecord::Base
belongs_to :leader, :class_name => 'User'
belongs_to :follower, :class_name => 'User'
validate :doesnt_follow_self
private
def doesnt_follow_self
errors.add(:base, 'You can\'t follow yourself') if leader == follower
end
end
Autres conseils
Peut-être pouvez-vous utiliser une validation :
#app/models/followership.rb
Class FollowerShip < ActiveRecord::Base
include ActiveModel::Validations
...
validates_with FollowValidator
end
#app/validators/follow_validator.rb
class FollowValidator < ActiveModel::Validator
def validate(record)
if record.leader_id == record.follower_id
record.errors[:leader_id] << "Sorry, you can't follow yourself!"
end
end
end
J'étais à mi-chemin d'écrire ceci quand @BroiStatse
posté
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow