0

rails_admin( https://github.com/sferik/rails_admin)をバックエンドとして使用するRubyonRailsアプリケーションがあります。

私はbannerというモデルを持っているので、データベース内のbannersというテーブルです。管理者は、できるだけ多くのバナーを作成したり、削除したりすることができます。しかし、3つのバナーの数を修正したいと思います。3つのバナー(作成済み)が必要であり、管理者がバナーを作成または破棄できないようにします。

誰かが私を助けてもらえますか?

ありがとう!

4

3 に答える 3

0

has_many@RadBrad は、 3 つのバナーのセットを表す別のモデルで使用できる点を強調しています。たぶん、BannerSet などと呼ぶことができます。彼が言ったように 3 つを一度に作成するか、BannerSet 検証で 3 つのバナーのみが関連付けられていることを確認できます。

また、バナーの 3 つの ID を持つ BannerSet モデルに 3 つの属性 (列) を持つこともできます。常に 3 つのバナーであると確信している場合は、それも優れたデザインである可能性があります。

ただし、Banner 用のコントローラーしかない場合の方法は次のとおりです。これは、後でわかるように、最善の方法ではありません。

まず、コントローラーで宣言型承認を使用する可能性があります。

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

バナーを追加するために作成画面に到達した後に追加された場合でも、バナーを追加できないようにするには、Banner モデルに検証も追加します。

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行しか持てないことを完全に保証することはできません。これを行うには、この q&aで説明されているように、DB 側でトリガーなどが必要になります。しかし、基本的な解決策としては、それで問題ないかもしれません。

RailsAdminは非常に簡単に構成およびカスタマイズできますが (ドキュメントについては、そのwikiを参照してください)、さらに多くのカスタマイズが必要な場合は、 ActiveAdmin の使用も検討します。

于 2013-02-22T18:40:09.440 に答える
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
于 2013-02-22T18:10:10.853 に答える