2013-02-22 67 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 

應用程序/控制器/ 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 

現在只要別的地方給你打電話@ thing.banners < <,這樣保證了任何事情總會有三個橫幅。

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驗證中,您可以確保只有三個關聯的橫幅。

您甚至可以在橫幅集模型上擁有3個屬性(列),這些屬性具有3個橫幅廣告。如果你確定它會一直是3個橫幅,那麼這也可能是一個很好的設計。

但是,如果你只是有一個控制器的橫幅,這將是如何做到這一點,你會看到,這不是最好的方式。

首先,你可能在控制器中使用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行。要做到這一點,您需要在DB側使用觸發器或類似工具,如this q&a中所述。但是,對於一個基本的解決方案,這可能很好。

注意,即使RailsAdmin可配置和定製很容易地(參見其wiki對於文件),我還會考慮使用ActiveAdmin,如果你需要更多的定製。