【问题标题】:Rails self and associationRails 自我和关联
【发布时间】:2017-12-06 06:51:04
【问题描述】:

我有汽车和用户模型。

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 模型中,我想验证模型字段。" - 你想在model 字段上验证什么,存在?独特性?还有什么?

标签: ruby-on-rails validation model associations


【解决方案1】:

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

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

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

请查看有关此主题的rails guides

【讨论】:

    【解决方案2】:

    你可以在 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
    

    【讨论】:

    【解决方案3】:

    添加这样的验证:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      相关资源
      最近更新 更多