Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

300
Views
El método de validación personalizado de Rails no se llama

Creé un punto final accept_waiver que permite al usuario firmar una exención de gimnasio. El siguiente paso es agregar el método de validación :sign_only_one_waiver en el modelo Gym que valida que el usuario solo acepta una exención, pero no se llama al método.

Agregué on: :create para que la validación se ejecute cuando se cree la relación UserGymWaiver, lo que significa que el usuario ha firmado una renuncia pero aún crea la relación incluso si existen errores.

app/modelos/gimnasio.rb

 class Gym < ApplicationRecord include PgSearch::Model validate :sign_only_one_waiver, on: :create enum tier: { standard: 'standard', premium: 'premium' } has_many :gym_amenities, dependent: :destroy has_many :amenities, through: :gym_amenities reverse_geocoded_by :latitude, :longitude pg_search_scope :search, against: [ :name, :tier ], using: { tsearch: {prefix: true} } def sign_only_one_waiver user_waiver_collection = UserGymWaiver.where(gym_id: self.gym_id) errors.add(:gym, "you can only sign one waiver") if user_waiver_collection.count > 1 end

aplicación/controladores/api/v1/gyms_controller.rb

 class Api::V1::GymsController < ApplicationController before_action :load_gym, only: %i[accept_waiver] def accept_waiver gym_waiver = GymWaiver.find_by(gym_id: @gym.id) waiver_signed_by_user = UserGymWaiver.create!(user_id: current_user.id, gym_id: gym_waiver.gym_id) render json: UserGymWaiverBlueprint.render(waiver_signed_by_user, root: :data) end private def load_gym @gym = Gym.find(params[:id]) end
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La validación está en el modelo Gym , pero está creando un UserGymWaiver , ¡así que este código pertenece al modelo UserGymWaiver !

Probablemente también podría resolverlo con una validación de unicidad y un alcance, solo puede permitir una exención por gimnasio por usuario, puede encontrar más información aquí:

https://guides.rubyonrails.org/active_record_validations.html#uniqueness

Podría verse algo como esto:

 class UserGymWaiver < ApplicationRecord belongs_to :gym belongs_to :user validates :user, uniqueness: { scope: :gym, message: "you can only sign one waiver per gym" } end
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!