我有一个名为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值时,我想检查该组是否属于该用户。我不希望用户向其他用户的组添加和更新类别。在保存之前验证这一点的最佳做法是什么?感谢
答案 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它会在更新之前获得旧值。 在更新中,我们需要在创建中处理两者,我们没有以前的值。