2017-05-03 13 views
0

私は現在Ruby on Railsで新しく、rails adminという宝石があります。私は妥当性検査を繰り返せないようにしたい、私はそれを一つのメソッドに保存してグローバルにしたいので、私のモデルでは検証フォーマットを呼び出すことができます。ruby​​で私のモデルのバリデーション(英数字のみ受け入れる方法)

アプリケーションコントローラにdefを追加しましたが、その内部にはグローバルとして宣言していますが、特殊文字を入力すると追加されます。

注:私の検証は英数字のみ許可されているか...

予想される出力アンダースコア:それは文句を言わない入力が英数字でない限り、追加または

質問下線:私のグローバル変数が間違っているの?私はちょうど

モデル

class ActivityType < ApplicationRecord 
    has_many :activities 

    validates :name, presence: true, length: { maximum: 20 }, 
          :uniqueness => true, 
          format: { with: /\A[\w\_]+\z/ } 
    validates :description, presence: true, 
         format: { with: /\A[\w]+\z/ } 

end 

RegexValidations

module RegexValidations 
    def self.alphanumeric_underscore 
    { with: /\A[\w\_]+\z/ } 
    end 
end 

答えて

1
  • 検証はそれぞれの属性のためのモデルレベルで行われ、それを呼び出すように、どのように私は、グローバル変数を作ることができます。
  • application_controllerでメソッドを定義してもグローバルにはなりませんが、それを継承するすべてのコントローラからアクセス可能です。

モデル検証validatesは、列内の文字列のフォーマットを検証するのに十分である必要があります。

編集/即興:

あなたは正規表現乾燥が/すべてのモデルのために繰り返さないようにしたい場合。あなたのlibフォルダにモジュールを作成言う:

module RegexValidations 
    def self.alphanumeric_underscore 
    { with: /\A[\w\_]+\z/ } 
    end 
end 

そして、あなたのモデルでは、それを含めると言う:

include RegexValidations 
validates :description, presence: true, format: RegexValidations.alphanumeric_underscore 

使用すると、1つのファイルに複数の正規表現を書いて、それを維持するすべてのモデルでそれを使用することができますこの方法をドライ。 PS:残念ながら私はそれをテストすることはできませんでした。しかしそれはうまくいくはずです。エラーが発生した場合はお知らせください。

+0

'RegexValidations.alphanumeric_underscore'を実行する場合は、それを含める必要はありません。 –

+0

regexvalidations.rbという名前の新しいファイルを作成しましたが、正しいですか? – Angel

+0

はい、 'regex_validations.rb'という名前のファイルを作成してください。おそらく@Sergio Tulentsevは正しいでしょう。まずそれを含めることなく試してみてください。 –

関連する問題