sql >> データベース >  >> RDS >> PostgreSQL

Rails Dynamicwheresqlクエリ

    あなたが間違った問題を解決しようとしているので、あなたのアプローチは少しずれています。単にクエリを作成しようとしているときにクエリを作成できるように、ActiveRecordに渡す文字列を作成しようとしています。

    あなたが次のようなことを言うとき:

    Model.where('a and b')
    

    それは言うことと同じです:

    Model.where('a').where('b')
    

    そしてあなたは言うことができます:

    Model.where('c like ?', pattern)
    

    代わりに:

    Model.where("c like '#{pattern}'")
    

    これら2つのアイデアをself.instance_valuesと組み合わせる 次のようなものが得られます:

    def query
      self.instance_values.select { |_, v| v.present? }.inject(YourModel) do |q, (name, value)|
        q.where("#{name} like ?", "%#{value}%")
      end
    end
    

    または:

    def query
      empties      = ->(_, v) { v.blank? }
      add_to_query = ->(q, (n, v)) { q.where("#{n} like ?", "%#{v}%") }
      instance_values.reject(&empties)
                     .inject(YourModel, &add_to_query)
    end
    

    これらは、すべてのインスタンス変数を適切にホワイトリストに登録したことを前提としています。そうでない場合は、そうする必要があります。




    1. sudomakeはエラーmemcacheセットアップを返します

    2. 最も類似した数値行を見つけるためのMySQLクエリ

    3. MySQL:一意のフィールドはインデックスである必要がありますか?

    4. WindowsのNetbeans/Glassfishでjdbcドライバを追加する場所はどこですか?