2016-07-19 1 views
1

Rails 4.1.8とRuby 2.1.5とActiveRecordを使用してデータベースからレコードのサブセットを選択しようとしています。しかし、結果にはwhere.not節で省略しようとしているレコードが含まれています。結果として得られるSQLも以下に記載されています。 where.not句のSQLが無視されているか、間違っていると思われます。これを行う適切な方法は何ですか?Rails ActiveRecordは、whereとwhere.notの混合条件ではありません。

class TablesController < ApplicationController 

    def index 
    @tables = Table.all.order("fil ASC").where(object: ['REP', 'CPT']).where.not(srcmbr: 'A*') 
    end 

end 

結果

Table Load (7.3ms) SELECT inputfile.* FROM inputfile WHERE inputfile.object IN ('REP', 'CPT') AND (inputfile.srcmbr != 'A*') ORDER BY fil ASC 
    Rendered tables/index.html.erb within layouts/application (709.1ms) 
Completed 200 OK in 912ms (Views: 882.4ms | ActiveRecord: 20.4ms) 
+1

「A *」はパターンマッチングを表していますか?そうでない場合は、 '.where( 'srcmbr NOT LIKE?'、 'A%')' – maicher

+0

ちょうど注記: 'Table.where(オブジェクト:['REP'、 'C​​PT'])。where.not(srcmbr : 'A *').order(fil::asc) '。とにかくクエリで何が間違っていますか?スジは通ってるようだ。 – potashin

+0

「A *」と一致する項目が結果に表示されます。 –

答えて

2

A*はパターンマッチングを表しますか?その場合は、次のように試してください:

.where('srcmbr NOT LIKE ?', 'A%') 
0

.where( 'SRCMBR、NOT LIKE?'、 '%')

これは私の問題を解決しました。

+1

これは@maicherによって提案されました。適切な行動は、回答を投稿して受け入れるように求めることです。 –

+0

私はそれをしたいと思っていますが、私はなぜ彼が答えを投稿していないのか分かりません。 –

関連する問題