0

form_tagRails 3アプリで、どのモデルにもバインドされていないフォームにを使用しています。このヘルパーにはモデルにバインドされたヘルパーと同じサニタイズの利点がないことを理解しています(間違っている場合は訂正してください)。そのform_forため、フォームへのすべての入力を手動でサニタイズしています。

これが私のコントローラーです(基本だけです):

include ActionView::Helpers::TextHelper

class MyController < ApplicationController

   localVariable = params[:my_form_param].to_s

   localVariable = strip_tags(localVariable)

   localVariable = sanitize(localVariable)

end

この問題は、キリル文字やスカンジナビア文字などの文字がフォームフィールドに含まれている場合に発生します。次のメッセージが返されます。

undefined method `bytesize' for nil:NilClass

strip_tagsとメソッドに絞り込みましたが、sanitize実際にはそれらを使用して不正な入力を削除する必要があります。to_sメソッドも各メソッドにシフトしようとしましたが(たとえばstrip_tags (localVariable.to_s))、運がありません-フォームが機能することを確認する唯一の方法は、これらの2行をすべてコメントアウトすることです(私が言うように、これは私がやりたくないこと)。

誰かがこれについて何か考えを持っていますか?ここではモデルを使用していないことを念頭に置いて、使用できる代替アプローチはありますか?使用form_forすると少しやり過ぎになる可能性がありますか?

ありがとう!

4

2 に答える 2

2

これは同じように見えますが、ここでRailsに報告されました。

to_strの代わりにメソッドを使用して解決する必要がありますto_s。つまり、次のようになります。

localVariable = params[:my_form_param].to_str
于 2012-11-21T17:39:00.993 に答える
0

Tamer Shlashのアドバイスと、コードを少しハックすることの両方を使用して、この問題を解決したと思います。

コードの順序も重要であるように思われます。次のように、、、strip_tags次にsanitize、最後にメソッドを追加to_strします。

    include ActionView::Helpers::TextHelper

    class MyController < ApplicationController

       localVariable = params[:my_form_param].to_s

       localVariable = strip_tags(localVariable)

       localVariable = sanitize(localVariable)

       localVariable = localVariable.to_str

    end

エラーメッセージは表示されなくなります。

于 2012-11-22T09:34:53.760 に答える