【问题标题】:Rails, validate existance of object from other modelRails,验证来自其他模型的对象是否存在
【发布时间】:2016-04-06 23:48:50
【问题描述】:

我有一个包含 3 个模型的简单应用 - 餐厅、员工和用户。 我的餐厅模型 has_many 员工,我可以通过创建其他员工并为员工的属性 user_id 赋值来雇用其他员工。如何在保存新员工之前检查 id=user_id 的用户是否存在?谢谢!

编辑======= 解决方案

validate :user_exists

  def user_exists
   if User.exists?(self.user_id)
    return true
   else
    self.errors.add(:user_id, "Unable to find this user.")
    return false
   end
  end

【问题讨论】:

    标签: ruby-on-rails validation model


    【解决方案1】:

    实际上有一种更简单的方法,因为您可以直接验证 belongs_to 关联:

    在员工中

    validates :user, presence: true, message: "could not be found"

    【讨论】:

    • 我没有放模型是我的错,但是员工和用户之间没有关联。但是,说每个用户都有_many员工可能是个好主意(不听起来不错,不过..) 谢谢 :)
    【解决方案2】:
    class Employee < ActiveRecord::Base
    
      validate :user_exists, message: "#{user_id} must be a valid user"
    
      def user_exists
       return false if User.find(self.user_id).nil?
      end
    end
    

    【讨论】:

    • 请提供一些上下文,而不是仅仅用代码块回答。
    • 几乎是对的。非常感谢!但是,该消息不起作用,我不得不稍微更改方法。现在,我只需要弄清楚如何修复错误消息...
    【解决方案3】:

    它适用于此代码(未找到 id 时不创建员工)但错误消息未显示...

         validate :user_exists
    
          def user_exists
           if User.exists?(self.user_id)
            return true
           else
            self.errors.add(:error, "Unable to find this user.")
            return false
           end
          end
    

    【讨论】:

    • 如何使用 :user_id 属性来显示错误消息? self.errors.add(:user_id, "无法找到该用户。")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多