我正在编写一个Rails 3.2应用程序,这种类型的要求经常出现我确定。在我的应用程序中,我有以下ActiveRecord模型:
我想确保当用户创建新邮件时,他们只能将自己的联系人添加到邮件中。是否愿意听到可能使此过程干涸的建议和/或相关宝石(cancan?)。
以下是我放在一起的内容,似乎有效,但我想知道我是否正确地做到这一点。
class Message < ActiveRecord::Base
belongs_to :user
has_many :message_contacts
has_many :contacts, through: :message_contacts
validates_each :contacts do |record, attr, contacts|
contacts.each do |contact|
record.errors.add(attr, 'must belong to you') if contact.user_id != record.user_id
end
end
end
答案 0 :(得分:0)
您的代码遵循此类情况的可接受风格。
如果您不希望用户不拥有的每个联系人都有错误,但尝试包含您不拥有的联系人只有一个错误,您可以这样做:
validates :contacts_ownership
def contacts_ownership
errors.add(:contacts, 'must belong to you') unless (contacts - user.contacts).empty?
end
但它更多的是品味和要求而不是首选方法。如果每个联系人都需要错误,那么您的方式会更好。如果您只需要AN错误,这种方式可能更好。它还可以帮助您,如果需要,它可以更容易阅读,更容易单独测试。