3

モデル' Human 'があり、このモデルには整数属性:ageがあります。
たとえば、この整数属性:ageの検証を使用します。

:ageの値が間違っている新しい' Human 'を追加すると(たとえば、 "2aaa3" )、エラーで返されますが、 "2"のように:ageもカットされます。しかし、私はそれを望んでいません。最後の間違った値「2aaa3」を残したい。

だから、質問は「どうすればいいの?」です。

4

2 に答える 2

0

これが、Railsでの検証のデフォルトの動作です。それをオーバーライドする他の方法があるかどうかわからない。ただし、javascriptを使用してその検証を行うことはできます。これは、validates_numericality_ofを使用するよりもはるかにユーザーエクスペリエンス指向になります。

于 2011-01-17T11:43:27.080 に答える
0

こんにちは私の質問に興味のある皆さん。

私は自分で解決策を作成したと言ってうれしいです。しかし、私はそれにいくつかの意見があります。))

まず、解決策は次のとおりです。

class ApplicationController < ActionController::Base
...
...
  after_filter :restore_int_value, :only => [:create, :update]
...
...
  private
...
...
  def restore_int_value
    response.body = response.body.gsub(/(numeric.*<input id=")([^_]*)(_)([^"]*)(.*value=")(\d+)(")/){$1 + $2 + $3 + $4 + $5 + params[$2][$4] + $7}
  end
...
...
end

第二に、備考は次のとおりです。

1)ソリューションは「Formtastic」や「Simple_form」などのgemに沿って機能します。これらのgemは、詳細なhtmlでラップされたフォームを作成し、正規表現を使用する可能性を提供します。このようなgemを使用しない場合は、たとえば、次のように「p」タグで「numeric」クラスを使用してすべての整数属性をラップできます。私のソリューションはこれでも機能すると思います。

<p class="numeric"> <%= text_field(:human, :age) %> </p>

2)私のソリューションは、複数モデル形式のネストされたモデルの整数フィールドでは機能しないと思います。(Ryan Batesは、「AdvancedRailsRecipes」の「HandleMultipleModelsin OneForm」でそのような作業について説明しています)。しかし、Ryan Batesの記事を読むと、彼がすでにJavaScriptを使用していることがわかります。したがって、ネストされたモデルをフォームで操作するには、JavaScriptが必要です。次に、JavaScriptを検証にも使用できます(Kundayが言ったように)。そして、あなたは問題を抱えることはありません。;)ただし、フォームに静的な数のネストされたモデルがあり、JavaScriptを使用しない場合は、ニーズに合わせて新しい特定の正規表現を作成できると思います(私が作成したものと同様)。これでなんとかなるといいですね。;)

私はあなたがそのような問題を抱えることができるすべてのシナリオをカバーしたことを望みます、そして私の解決策は私以外の誰かのために役立つでしょう。;)

于 2011-01-22T19:16:56.270 に答える