0

ない、あなたが知っている、このための修正があるかどうかわからをグローバル化使用して、私は場合はグローバル化の宝石のRails:SQLと述べた場合は、アクティブレコードクエリー条件だけ働く - 宝石

class Menu < ActiveRecord::Base 

    translates :name 
    # other stuff ... 

end 

を使用した場合アクティブなレコードクエリーを標準で書くと、空のセットが生成されます。

- 総称的

Model.where(attribute: "Value") 

が動作しない、

Model.where('attribute = ?', 'Value') 

が作業を行います。

---私のメニュー・モデル上のコンソールから現実世界の例:なぜこれが起こっている

2.3.0 (main):0 > Menu.where(name: "Lunch Boxes") 
=> [] 
2.3.0 (main):0 > Menu.where('name = ?', "Lunch Boxes") 
=> [#<Menu:0x007fbab6dc6838 id: 12, restaurant_id: 15, name: "Lunch Boxes", created_at: Wed, 05 Jul 2017 16:07:20 EDT -04:00, updated_at: Thu, 10 Aug 2017 14:48:38 EDT -04:00>] 

誰も教えてもらえますか?ちょうど良い対策のための

Railsの4.2.6 ルビー2.3.0

+0

私はあなたの背後にあるが、 'Model.where(属性:"値 ")。to_sql'と' Model.where( '属性=?'、 '値')。啓蒙されているかもしれません。未加工のテーブルデータを見る(途中でActiveRecordノイズがない)ことも啓発されるかもしれません。 –

+0

muあなたは天才です。ブリー。 to_sqlの提案をすばやく見れば、翻訳テーブルに翻訳がないと、(検索時に翻訳が必要な属性を持つ)モデルがnilを返してコレクションが空になっていることが明らかになりました。私の鉱山のアプリを沸かした(明らかに機能しているように機能している)。ありがとう – trh

+0

答えにそのコメントを変換する価値があるかもしれません。物事が「うまく行かない」とき、すべての魔法は非常に困惑することがあります。 –

答えて

2

おかげ@ MU-ある-短すぎる - それは自分でそれを把握するためにかかったでしょうどのくらい全く分かりません。

何が起こっていたのかを知るというトリックは、私がSQLと比較していた2つのコマンドに変換して、何が試みられているのかを正確に見ることができた。

Menu.where(name: "Lunch Boxes").to_sql 
Menu.where('name = ?', "Lunch Boxes").to_sql 

それぞれ、生産これら:だから

=> "SELECT \"menus\".* FROM \"menus\" WHERE (name = 'Lunch Boxes')" 

=> "SELECT \"menus\".* FROM \"menus\" INNER JOIN \"menu_translations\" 
    ON \"menu_translations\".\"menu_id\" = \"menus\".\"id\" WHERE 
    \"menu_translations\".\"name\" = 'Lunch Boxes' AND 
    \"menu_translations\".\"locale\" = 'fr'" 

はその後、私はpsqlのコンソールで直接クエリを実行し、空のセットで帰ってきました。それはつまり、グローバル化の宝石が付属したモデルのヘルパーを使用することによって可能になった、menu_translationsテーブルに参加していたので:

translates :name 

はSO、私は変換テーブルをチェックし、用語「ランチボックス」のdidnことがわかりましたすべての翻訳に存在し、属性nameがグローバル化されているため、変換が必要です。

翻訳が追加され、問題が解決しました。これが他の人に役立つことを願っています

0

それはすべての権利です。このデータをクラスから取得しようとしており、レールが特殊文字のフィルタを待っています。

詳細情報 - SQL Injection: 7.2.4 Countermeasures

+0

?あなたは誤解しているかもしれません。あなたが読んだことを教えてくれたdocのセクションには、「または同じ結果のハッシュを渡すことができる」と書かれています.-私は単純にハッシュを渡して、空の結果を得ようとしています。 SQLフラグメントを使用します。どちらも有効なステートメントですが、なぜハッシュバージョンは機能しませんか?それは私の質問です。 – trh

+0

@trhセキュリティーのことは決してできないように見えます:) しかし、私はあなたの意見を理解しました。あなたはレールv.5 +でこれを試していますか? –

+0

いいえ、私はこのアプリのためにレール4についています。 Boooooooooooooooooooo。 – trh

関連する問題