web-dev-qa-db-ja.com

railsモデルで、値が配列内にあることを検証します

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

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

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

使用してみましたvalidates_exclusion_ofまたはvalidates_inclusion_ofがありますが、機能していないようです

21
stergosz

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

class Thing < ActiveRecord::Base
   validates :mytype, :inclusion=> { :in => @allowed_types }
43
RadBrad

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

validates_inclusion_of :type, in: @allowed_types

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

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

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

21
Caleb Thompson