如何验证外键值是否属于当前用户?

时间:2015-04-09 13:23:04

标签: ruby-on-rails ruby-on-rails-4 activerecord

在我的Rails 4应用中,我users可以有多个companies,而people可以有很多company_id

当用户创建新人时,如何验证他不可能(通过浏览器黑客行为)选择其他用户class Person < ActiveRecord::Base belongs_to :user belongs_to :company validates :company_id, :inclusion => { :in => Company.where(:user_id => user_id) } ... end

我想在模型级别处理这个问题,但这不起作用:

{{1}}

感谢任何想法。

2 个答案:

答案 0 :(得分:1)

您需要将公司ID数组传递给in:,如下所示:

validates :company_id, :inclusion => { :in => Proc.new { |person| Company.where(:user_id => person.user_id).pluck(:id) } }

答案 1 :(得分:1)

你需要使用proc:

 validates :company_id, :inclusion => { :in => proc { |record| Company.where(:user_id => record.user_id) } }

我希望语法正确,我没有检查它:)