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表之后运行。