【发布时间】:2023-03-05 19:42:02
【问题描述】:
我的 Rails 应用程序的一些代码有问题,想象一下以下场景:
user.rb
class User < ActiveRecord::Base
has_one :participant, dependent: :destroy
validates_presence_of :username
accepts_nested_attributes_for :participant
end
participant.rb
class Participant < ActiveRecord::Base
belongs_to :user
validates_presence_of :phone_number
end
问题发生在我运行valid? 方法时
user = User.first
user.valid?
#=> true
此时用户验证正常(它仅运行来自用户模型的验证),但如果由于某种原因加载了与参与者的关联,则valid? 方法将从 用户 运行验证> 并且来自 Participant 恕我直言是错误的,因为user 是用户模型的一个实例
user.participant
Participant Load (0.3ms) SELECT "participants".* FROM "participants" WHERE "participants"."user_id" = ? LIMIT 1 [["user_id", 1]]
=> #<Participant id: 1, user_id: 1, phone_number: "", created_at: "2015-01-13 18:15:34", updated_at: "2015-01-13 18:48:27">
user.valid?
#=>false
user.errors.full_messages
#=> ["Participant phone number can't be blank"]
如果我要更新参与者模型中的某些内容,我会同意此验证,但我不同意。这是一个错误还是有什么方法可以跳过相关的验证?
谢谢
【问题讨论】:
标签: ruby-on-rails validation nested-attributes one-to-one