Ruby on rails 限制用户在一个关系中创建一个对象

Ruby on rails 限制用户在一个关系中创建一个对象,ruby-on-rails,model,restrict,Ruby On Rails,Model,Restrict,我试图使我的用户不能创建多个农场。在我的用户模型中,我有: 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"

我试图使我的用户不能创建多个农场。在我的用户模型中,我有:

 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

请注意,在此之前,我可以通过我的一个用户创建任意数量的农场。有没有更好的方法来限制它,以便用户只能添加一个场?

有一个
将创建一个单数的
方法,如下所示

user = User.find(1)
user.farm
不需要在Rails中进行额外的检查。但是,这并不能在数据库级别强制执行,即不会有一个用户拥有多个服务器场。防止这种情况的方法主要是创建一个唯一的索引。可以在迁移中这样做

add_index :farms, :user_id, unique: true

这将确保数据库中不能有一个拥有多个服务器场的用户。

请让我澄清,我正在用户迁移文件中添加此唯一索引?添加到何处并不重要,可以是服务器场内迁移,也可以是单独的迁移(如果愿意)。它只需在创建farms表之后运行。