2011-04-27 2 views
2

사용자가 5 페이지를 초과하는 것을 차단하려고합니다. 내 페이지 모델은 다음과 같습니다.카운터 캐시를 사용하여 최대 관계 수 제한

class Page < ActiveRecord::Base 
    belongs_to :user, :counter_cache => true 
    has_friendly_id :name, :use_slug => true, :strip_non_ascii => true 
    validates_uniqueness_of :name, :case_sensitive => false 
    validates_presence_of :name 
end 

그리고 나는 증가하고 감소하는 db에 열을 추가했습니다.

나는 오류를 던져 너무 많은 태그를 추가하지 못하도록 내 컨트롤러에 무엇을 넣어야할지 모릅니다.

다시 한번 감사

- 업데이트 -

이이처럼 내 사용자 모델은 지금 모습입니다 : 당신은 사용자 -의 사용자 측에 :before_add 콜백을 사용할 수 있습니다

class User < ActiveRecord::Base 
    has_many :pages, :dependent => :destroy, :before_add => :enforce_page_limit 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    validates_presence_of :name 
    validates_uniqueness_of :name, :email, :case_sensitive => false 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :name, :email, :password, :password_confirmation, :remember_me 
    has_friendly_id :name, :use_slug => true, :strip_non_ascii => true 

    private 

    def enforce_page_limit 
     if self.pages_count >= 1 
     self.errors.add_to_base "Page limit reached, can't add another page" 
     raise "User page limit reaching, preventing page from being added" 
     end 
    end 
end 

답변

1

페이지 관계. 이 페이지의 협회 콜백 섹션을 확인 : http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

이미 사용자에게 관련 5 페이지가 있는지 확인하기 위해 콜백을 쓰고 싶어하고,이 경우, 차단 예외를 발생시킬 수 있습니다 페이지가 사용자와 관련없는 것.

UPDATE는

다음은 before_add 콜백을 설정하는 것입니다 방법에 대한 예입니다. 귀하의 사용자 모델에서

: 대답에 대한

class User < ActiveRecord::Base 

    has_many :pages, :before_add => :enforce_page_limit 

    private 

    def enforce_page_limit 
    if self.pages.count >= 5 
     self.errors.add_to_base "Page limit reached, can't add another page" 
     raise "User page limit reaching, preventing page from being added" 
    end 
    end 

end 
+0

덕분에, 나는 개념을 얻을 수 있지만 그 방법 밖에 이해의 내 필드입니다. 초보자 일뿐입니다! 내가 볼 수있는 자습서를 알게 되었습니까? 보내 주신 링크를 통해 살펴 보았지만 나에게 충분히 명확한 내용은 볼 수 없었습니다. 다시 한 번 감사드립니다 –

+0

몇 가지 샘플 코드로 답변을 업데이트했는데 도움이됩니까? – ctcherry

+0

정말 대단합니다. 다시 한번 감사드립니다. 나는 성공하지 않고 내 솔루션을 시험해보고있었습니다. 내 사용자 모델에 코드를 넣었지만 적용하지 않는 것 같습니다. 오류가 표시되지 않습니다. 카운트를 1로 줄 였지만 새 페이지를 만들 수 있습니다. 코드를 첫 번째 편집에 넣을 것입니다. –