如何验证依赖行属于用户

时间:2014-03-25 13:07:53

标签: ruby-on-rails

我有一个名为Category的模型;

class Category < ActiveRecord::Base
  belongs_to :user
  belongs_to :group

  validates :name, presence: true
  validates :user_id, presence: true
end

而且,我有一个名为Group的模型:

class Group < ActiveRecord::Base
  belongs_to :user
  has_many :categories

  validates :name, presence: true
  validates :user_id, presence: true
end

如您所见,一个群组可以有多个类别。当用户添加类别或更新它的group_id值时,我想检查该组是否属于该用户。我不希望用户向其他用户的组添加和更新类别。在保存之前验证这一点的最佳做法是什么?感谢

1 个答案:

答案 0 :(得分:0)

validate :ownership_of_group

def ownership_of_group
  ids = []
  ids << self.group_id
  ids << self.group_id_was if self.group_id_was.present?
  if(Group.find(ids).reject {|group| group.user_id == self.user_id}.present?)
    # if all of them is owned by the user the array will return an empty array
    errors.add(:user_id, 'You cant edit a category that is not yours')
  end
end

如果我们说group_id,我们得到使用时设置的当前值。 如果我们说group_id_was它会在更新之前获得旧值。 在更新中,我们需要在创建中处理两者,我们没有以前的值。