2014-07-12 42 views
0

我试图让我的用户不能创建多个服务器场。在我的用户模型中,我有:限制用户在has_one关系中创建一个对象

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前我能够根据自己的需要创建尽可能多的农场。有没有更好的方法来限制它,以便用户只能添加一个农场?

回答

1

has_one将创造出奇异的farm方法这样

user = User.find(1) 
user.farm 

没有必要在Rails的这个额外的检查。但是,这不会在数据库级别强制执行,即不会有一个用户拥有多个服务器场。防止这种情况的方法主要是创建一个唯一的索引。可以在迁移中这样做。

add_index :farms, :user_id, unique: true 

这将确保在db中不能有多个农场的用户。

+0

让我清楚,我在用户迁移文件中添加此唯一索引? –

+0

添加它的位置并不重要,可以在农场迁移或只是单独迁移,如果你喜欢。它只需在创建农场表后运行。 – Iceman