RoR には、いくつかのパラメーターを処理できる検索アクションがあります。
params[:name] # can be nil or first_name
params[:age] # can be nil or age
params[:city] # can be nil or country
params[:tag] # can be nil or country
モデル名はPerson
. それもhas_many :tags
。
必要な人を見つけるときは、存在するすべての条件に AND を使用するのが好きです。もちろん、それは合理的ではなく、DRY ではありません。
私がやろうとしたこと:
conditions = []
conditions << [ "name like ?", params[:name]+"%" ] if params[:name].present?
conditions << [ "age = ?", params[:age] ] if params[:age].present?
conditions << [ "city = like ?", params[:city]+"%" ] if params[:city].present?
@persons = Person.all(:conditions => conditions )
#What about tags? How do include them if params[:tag].present?
もちろん、コードを DRY にしたいです。今はそうではありません。さらに、params[:age]
andparams[:name]
とparams[:city]
が存在しない場合、例外が発生します。
どうすれば解決できますか?tag.name=params[:tag]
また、 (if )でフィルタリングされた人物のタグを含めるにはどうすればよいparams[:tag].present?
ですか?