2015-11-01 31 views
1

我下面的迈克尔·哈特尔教程,并要设置的方法来限制用户量的人可以按照用户以下的配额限制

我应该设置的限制模型/ relationship.rb

应用程序/模型/ relationship.rb

validate :following_quota, :on => :create 

private 

def following_quota 
if user.active_relationships.size >= 3 
    error.add(:base, 'exceeded follow limit') 
end 
end 

或者我应该设置这样的模型/ user.rb

+0

则需要使用自定义验证器?什么是主动关系?范围?关系? – lcguida

+0

控制器或多或少地找出要渲染的视图和持久性。这样的代码应该是模型中的自定义验证。 – MarsAtomic

+0

@MarsAtomic是的,我已经在模型中设置了验证 –

回答

0

如果你要参考相关的数据,你需要使用inverse_of;

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_many :active_relationships, inverse_of: :user 
end 

#app/models/relationship.rb 
class Relationship < ActiveRecord::Base 
    belongs_to :user, inverse_of: :active_relationships 
end 

你把验证的地方取决于你打电话给哪个模型。

我想像你正在创建一个新的relationship,这将意味着你把它放在关系模型,使用从user关联对象数据:

#app/models/relationship.rb 
class Relationship < ActiveRecord::Base 
    belongs_to :user, inverse_of: :active_relationships 
    validate :max_followers, only: :create 

    private 

    def max_followers 
     error.add(:base, 'exceeded follow limit') if user.active_relationships.size >= 3 
    end 
end 
+0

我不认为我需要创建关系的逆,如果我在关系控制器中有一个销毁方法 - 现在我正在验证max_followers验证,并在日志中得到这个错误:NoMethodError(undefined method'active_relationships 'for nil:NilClass): app/models/relationship.rb:16:in'max_followers' app/models/user.rb:46:in'follow' app/controllers/relationships_controller.rb:5:in'创建' –