Rails 自我与联想

Rails self and association

我有车和用户模型。

User.rb
has_many :cars

Car.rb
belongs_to :user

我只想验证汽车模型中的模型字段,前提是它的用户 mdk_id 不是 nil。

这就是我创建汽车模型的方式,

user = User.where(mdk_id: b["companyid"]).first

car = user.cars.build 

然后在 Car.rb 模型中,我想验证 model 字段。

我试过了;

  validates :model if self.user.mdk_id != nil

但是报错;

undefined method `user' for #<Class:0x007f973a321a58>

我如何引用它?

您可以在 Car.rb

中执行这些操作
validate :validate_user, on: [:create, :update]

def validate_user
  if self.user.mdk_id == nil
    #display error message here
    #such as User's mdk_id cannot be null etc.
  end
end

您可以像这样将 proc 传递给 if 选项:

validates :model, presence: true, if: proc { |car| car.user.mdk_id? }

(我假设您需要验证该字段是否存在,如果需要,您可以更改验证)。

请查看有关此主题的 rails guides

添加这样的验证:

validates :model if self.user.mdk_id != nil

不会工作,因为 self 这里是 class Car 但验证将在 Car 的实例上进行。此外,您需要指定所需的验证类型。

说,只要汽车有用户并且用户设置了 mdk_id,您希望 model 字段有一个值(强制),那么您可以按如下方式进行:

# car.rb
validates :model, presence: true, if: -> { self.user && self.user.mdk_id.present? }