2011-12-07 3 views
2

mysqlデータベースのフィールドにmysql regular epxressionを保存します。具体的には、単語境界表現をデータベースに保存したいと思います。例:山括弧(<>)の間の文字はデータベースで取り除かれますか?

[[:<:]]my expression here[[:>:]] 

この値をデータベースに直接入力すると(たとえば、Sequel Proを使用して)、値が正しく保存されます。

問題私はRuby on Railsをしてこの値を格納したいときに発生:

my_instance.sql_expression = "[[:<:]]my expression here[[:>:]]" 
my_instance.save 
=> true 

しかし、実際にデータベースに格納された値は、次のようになります。

my_instance.sql_expression 
=> "[[::]]" 

これは、文字列のRailsでいるようです"<"と ">"の間にあるものをすべて無視してください。

プロジェクトはRuby 1.8.7とRails 2.3.5です。

+6

保存されているものが混乱していることは確かですか?私は混乱しているのはアウトプットだと思います。詳細については、http://stackoverflow.com/questions/4251284/raw-vs-html-safe-vs-h-to-unescape-htmlを参照して、ここで何が起きているかを確認してください。 – sarnold

+0

これらの例はREPLから実行され、直接ペーストされていますか? (2番目に入力ミスがありますか?) –

+0

Lorem Ipsum'を保存するとどうなりますか? –

答えて

1

これは、xss_terminateのようなものを使用しているため、モデルを保存する前にフィルタリングしているようです。あなたのモデル定義で、before_saveやこれを侵入しているかもしれない他のフックを探しています。

これは標準的なRailsの動作ではありません。