2013-02-22 6 views
0

rails_admin (https://github.com/sferik/rails_admin)을 백엔드로 사용하는 Ruby on Rails 애플리케이션이 있습니다.rails_admin에서 테이블의 행 수를 제한합니다.

저는 배너라는 모델을 가지고 있으므로 데이터베이스에있는 테이블은 배너라고합니다. 관리자는 최대한 많은 배너를 만들 수 있으며 삭제할 수도 있습니다. 그러나 나는 3 개의 배너를 고치고 싶습니다. (이미 생성 된) 3 개의 배너를 갖고 싶습니다. 관리자가 배너를 만들거나 파괴 할 수 없도록하고 싶습니다.

누군가 나를 도울 수 있습니까?

감사합니다.

답변

0
class Thing < ActiveRecord::Base 
    has_many :banners 
end 

응용 프로그램/컨트롤러/지금은 너무 오래 같은 곳이 당신이 thing.banners < < @, 당신은 어떤 일이 항상 세 가지 배너있을 것이라는 점을 보장 전화에 things_controller.rb

def create 
    @thing = Thing.new 
    @thing.banners << Banner.new(:name=>'Banner 1',....) 
    @thing.banners << Banner.new(:name=>'Banner 2',....) 
    @thing.banners << Banner.new(:name=>'Banner 3',....) 
    @thing.save 
end 

. 구조에

0

하는 검증 :

class Thing < Active Record::Base 
    has_many :banners 

    validate :banner_count 

    private 
    def banner_count 
     errors.add(:base, "Banner count must be 3") unless self.banners.count == 3 
    end 
end 
0

@RadBrad는 세 가지 배너 세트를 나타내는 다른 모델에 has_many를 사용할 수있는 포인트를합니다. 어쩌면 BannerSet 또는 이와 비슷한 호출 할 수 있습니다. 그가 말했던 것처럼 세 가지를 동시에 만들 수도 있고 BannerSet 유효성 검사에서 세 개의 배너 만 연결할 수도 있습니다.

BannerSet 모델에도 3 개의 배너 ids가있는 특성 (열)이있을 수도 있습니다. 당신은 그것이 항상 3 개의 배너가 될 것이 확실하다면, 그것은 훌륭한 디자인 일 수도 있습니다.

하지만 여기서는 가장 좋은 방법은 아닌 Banner 컨트롤러가있는 경우 어떻게 할 것입니까?

첫째, 당신은 아마도 컨트롤러 declarative authorization을 사용할 수

authorization do 
    has_permission_on :banners, :to => [:new, :create] do 
    Banner.count < 3 
    end 
end 

는 여전히 또한, 당신이 그것을 추가 생성 화면에 도착 후 추가 된 경우에도 배너를 추가 할 수 있도록하려면 배너 모델에 유효성 검사를 추가하십시오.

before_create :validate_max_banners 

def validate_max_banners 
    errors.add_to_base("Only 3 banners are allowed.") if Banner.count == 3 
    errors.empty? 
end 

해당 테이블에는 3 개의 행만있을 수 있습니다. 그렇게하려면 this q&a에 설명 된대로 DB 측면에서 방아쇠 등이 필요합니다. 그러나 기본적인 해결책을 위해서는 괜찮을 수도 있습니다.

RailsAdmin을 매우 쉽게 구성하고 사용자 지정할 수 있지만 (설명서의 경우 wiki 참조) 더 많은 사용자 지정이 필요한 경우 ActiveAdmin을 사용하는 것이 좋습니다.

관련 문제