1

HTMLコードに5つの選択があります。私はそれらをコントローラーに送信しますが、たとえば、それらのいくつかは空である可能性があります(デフォルト値は0です)。たとえば、場合によっては、経由のみを検索する必要がparams[:size] ある場合もあれば、経由のみを検索する必要がある場合もparams[:capacity]ありparams[:size] and params[:capacity]ます...しかし、どのようにこれにする?find などで操作するには?今、私はこのようなものを持っています:

size = "*"+params[:akbsize]+"*"
    @accums = Accumulator.find(:all, :conditions => ["MATCH(description) AGAINST (? in boolean mode)", size])
    cap = "*"+params[:akbcapacity]+"*"
    @accums2 = Accumulator.find(:all, :conditions => ["MATCH(description) AGAINST (? in boolean mode)", cap])

しかし、私が説明したようにするにはどうすればよいですか?ここはmetasearch gemでやってもいいですか?

4

3 に答える 3

1

次のようにメソッドを作成できます。

class Accumulator
  def self.by_size(size)
    if size
      where("description LIKE ?", "%#{size}%")
    else
      scoped
    end
  end

  def self.by_capacity(capacity)
    if capacity
      where("description LIKE ?", "%#{capacity}%")
    else
      scoped
    end
  end
end

次に、コントローラーで:

@accums = Accumulator.by_size(params[:size]).by_capacity(params[:capacity])

これはあなたが望むものを達成するでしょう。メソッド all はまったく必要ないと思います。

=)

于 2012-11-09T00:59:47.633 に答える
0

You could check out the Ransack gem, which more or less solves the problem of creating complex search forms.

于 2012-11-08T22:28:53.323 に答える
0
sterms = [params[:a],params[:b],params[:c]].select {|t| t}.join('%')
results = Accumulator.where("description like ?", "%#{sterms}%")

または、このようなブール検索を使用できます

sterms = [params[:a],params[:b],params[:c]].select {|t| t}.map {|t| '+' + t}.join(' ')
results = Accumulator.where("MATCH(description) AGAINST( ? in boolean mode) ", sterms)

または、params に渡された検索語のいずれかが一致を生成する説明を検索している場合は、次のようにします。

sterms = [params[:a],params[:b],params[:c]].select {|t| t}.join(' ')
results = Accumulator.where("MATCH(description) AGAINST( ? in boolean mode) ", sterms)

これらは、パラメータが単に存在しない、つまり nil であると想定しています。空であることを示すために使用する特定の値がある場合は、.select を変更します。

sterms = [params[:a],params[:b],params[:c]].select {|t| t != "0"}.join('%')

ご覧のとおり、検索ロジックのさまざまな順列と組み合わせを使い続けることができたので、何らかのメタ検索 gem を見つけることをお勧めします。

于 2012-11-08T21:52:07.273 に答える