Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class CreateFavoriteForm
- include ActiveModel::Model
- validate :scoped_favorite_limit
- validate :favorable_is_uniq
- def initialize(user:, **params)
- @user = user
- @params = params.merge(user_id: @user.id)
- end
- def save
- favorite = Favorite.new(@params)
- return favorite.save if valid? && favorite.valid?
- promote_errors(favorite)
- false
- end
- private
- def scoped_favorite_limit
- if @user.favorites.where(favorable_type: @params[:favorable_type]).count > 99
- errors.add(:favorites, "too many favorites")
- end
- end
- def favorable_is_uniq
- if @user.favorites.where(favorable_type: @params[:favorable_type], favorable_id: @params[:favorable_id]).exists?
- errors.add(:favorites, "must be unique")
- end
- end
- def promote_errors(object)
- object.errors.each do |key, val|
- errors.add(key, val)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement