0

Active Record の検証は、失敗するとエラーをスローします。私がモデルに持っているのは

validate_format_of :field_which_cannot_have_spaces, :with => /^[^\s]+$/, :message => "Some error message"

代わりに、アンダースコア (snake_case) をスペースに置き換える文字列置換が必要です。

私にとってバリデーションを使用する利点は、フィールドが変更されるたびに実行されることsave(validate: false)と、作成および更新コントローラー メソッドで置換を繰り返す必要がないことです。

ユーザーがフォームをハッキングした場合、フロントエンドの JavaScript ソリューションは役に立ちません... Rails ソリューションが必要です!

4

2 に答える 2

0

同僚から、モデルで次のことを行うように言われました。

def field_which_cannot_have_spaces=(input_from_form)
  super(input_from_form.gsub("\s","_"))
end

これにより、設定された値が変更されます。

「検証は、問題があることをクライアントに通知するためのものであり、エラーをスローする以外のことを行うべきではありません。」

これが他の誰かに役立つことを願っています...

于 2013-08-29T08:54:27.960 に答える