我试图让我的用户不能创建多个服务器场。在我的用户模型中,我有:
has_one :farm
在我的农场模型中,我有:
belongs_to :user
validate :farm_count_within_limit, :on => :create
def farm_count_within_limit
if self.user.farms(:reload).size > 1
errors.add(:base, "User can only add one farm")
end
end
但是我收到了这个错误:
NoMethodError in FarmsController#create
undefined method `farms' for nil:NilClass
请注意,在此farm_count_within_limit之前,我可以使用我的一个用户创建任意数量的服务器场。有没有更好的方法来限制它,以便用户只能添加一个服务器场?
答案 0 :(得分:1)
has_one
会像这样创建一个单一的farm
方法
user = User.find(1)
user.farm
无需在Rails中对此进行额外检查。但是,这不会在数据库级别强制执行,因为不会有具有多个服务器场的用户。防止这种情况的方法主要是创建一个唯一索引。可以在迁移中执行此操作。
add_index :farms, :user_id, unique: true
这将确保数据库中不能有一个具有多个服务器场的用户。