Rails - 如何验证外键引用的行的存在

bdx*_*bdx 14 foreign-keys ruby-on-rails-3

鉴于"Rails Way"似乎不使用外键约束,我正在寻找一种替代方案,允许我在TableB中保存对象之前验证外键引用确实存在于TableA中的行with table_a_id.

到目前为止我发现的唯一资源(无法找到它在2007年提到的博客文章的链接)似乎与Rails 3.2不兼容,所以任何人都可以建议一种方式这样做?

我目前正在寻找创建一个验证器来手动分配我的模型中的相关属性,但我无法弄清楚如何使用validate_each(对象,属性,值).

小智 34

只需使用如下,

validates :user, presence: true
Run Code Online (Sandbox Code Playgroud)

它会自动检查db中是否存在用户记录.

  • 记住`belongs_to:user`必须存在才能使用. (3认同)
  • 我认为这不是问题的答案。问题是如何检查该对象是否存在于数据库中并且它不是假的 _id。`验证存在`检查id是否始终存在 (3认同)

Nob*_*ita 6

有一个插件可以帮助你为belongs_to关联这个:验证存在.但是,也许你可以添加自己的验证?这样的事情怎么样:

# Assuming your foreign key is user_id (which references the table User)
validate :user_id_exists

def user_id_exists
  return false if User.find_by_id(self.user_id).nil?
end
Run Code Online (Sandbox Code Playgroud)