27

名前の付いたフィールド を渡すフォームがあり、その値が許可されたタイプの配列内にあるかどうか:typeを確認して、許可されていないタイプを投稿できないようにします

配列は次のようになります

@allowed_types = [
   'type1',
   'type2',
   'type3',
   'type4',
   'type5',
   'type6',
   'type7',
   etc...
]

またはを使用し てみましたが、機能しないようですvalidates_exclusion_ofvalidates_inclusion_of

4

3 に答える 3

51

まず、属性をタイプから別のタイプに変更します。タイプは、単一テーブル継承などに使用される予約済みの属性名です。

class Thing < ActiveRecord::Base
   validates :mytype, :inclusion=> { :in => @allowed_types }
于 2012-08-21T16:50:14.187 に答える
23

ActiveModel::Validationsこのためのヘルパーメソッドを提供します。呼び出しの例は次のとおりです。

validates_inclusion_of :type, in: @allowed_types

ActiveRecord::BaseはすでにActiveModel::Validationsであるため、何も含める必要はありません。

http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_inclusion_of

typeまた、@ RadBradは正しいので、STI用に予約されているため、列名として使用しないでください。

于 2012-08-21T16:57:42.767 に答える
10

(私のような)怠惰な人々が最新の構文をコピーするためだけに:

validates :status, inclusion: %w[pending processing succeeded failed]
  • validates_inclusion_ofRails3以降は古くなっています。
  • :inclusion=>Ruby 2.0以降、ハッシュ構文は古くなっています。
  • デフォルトのRubocopオプション%wとして単語配列を支持します。

バリエーションあり:

定数としてのデフォルトタイプ:

STATUSES = %w[pending processing succeeded failed]

validates :status, inclusion: STATUSES

OPのオリジナル:

validates :mytype, inclusion: @allowed_types
于 2020-07-24T13:34:06.550 に答える