0

データベース内の 1 つのテーブルを照会する検索フォームがありますが、多くのパラメーター (言語、レベル、作成者など) があります。問題のフィールドが入力されていれば、以下のコードは機能しますが、次のように変更したいと思います。

a) パラメータを追加します (いくつかあります)。b) フィールドが空であることを許可する

コントローラーのコードは次のとおりです。

@materials = Material.find(:all, :conditions => {:targ_lang => params["targ_lang"],
                                                 :inst_lang => params["inst_lang"],
                                                 :level => params["level"]})

これはまったく新しいことですが、多くのドキュメントでは、「where」を使用する必要があることが示唆されています。

4

2 に答える 2

2

Since Rails 3 you can use the where() function:

@materials = Material.where(targ_lang: params["targ_lang"], inst_lang: params["inst_lang"], level: params["level"])

Also, you could take a look at scopes

These allow you to set what you want to do in the model and call it in the controller for example:

class Material < ActiveRecord::Base
  scope :active, where(active_state: true)
end

Then in the controller you do something like:

@active_materials = Material.active

This can be useful if you are joining several models and want to keep your controllers less messy.

To conclude, like @RVG said, seachlogic is quite useful as well as, there are others like Sphinx and Elastic Search. You should take a quick look at these and use the one you feel most confortable with.

于 2013-01-28T11:01:56.693 に答える
1

アプリで検索機能を使用している場合は、SearchLogicgemを使用することをお勧めします

使いやすく効果的です。

SearchLogic

searchlogicのRailsCasts

于 2013-01-28T09:09:31.770 に答える