模型中的一个或多个参数使用Ruby on Rails查找条件

coa*_*ird 4 ruby ruby-on-rails

假设我有'Car'模型和控制器'cars',以及方法'display'.

我有多个属性,如:

in_production,year,make

我可以轻松地做这样的事情来找到符合所有传递参数的汽车:

def display
  @cars = Car.find(:all, :conditions => { :in_production => #{params[:in_production]}, :year => #{params[:year]}, :make => #{params[:make]} })`
end
Run Code Online (Sandbox Code Playgroud)

所以我正在做的是在菜单中编写硬链接,所以如果我想找到2009年生产的所有日产汽车,我会将这些值作为参数传递给我的链接.

在另一页上,我想展示2009年的每辆车都是in_production,只有两辆车而不是三辆车.什么是动态改变条件的最佳方式,以便它可以使用一个,两个或三个参数,同时使用相同的动作?

有任何想法吗?

ben*_*sie 10

首先,使用

:conditions => "in_production = '#{params[:in_production]}' AND year = '#{params[:year]}' AND make = '#{params[:make]}'"
Run Code Online (Sandbox Code Playgroud)

易受SQL注入攻击.在数据库条件中使用它们之前,您需要转义用户提供的参数.

这样的事情应该让你根据参数是否存在更加动态地添加条件.我没有测试它,所以我可能很快就会编辑它...

def display
  conditions = []
  conditions << [ "in_production = ?", params[:in_production] ] if params[:in_production].present?
  conditions << [ "year = ?", params[:year] ] if params[:year].present?
  conditions << [ "make = ?", params[:make] ] if params[:make].present?
  @cars = Car.all(:conditions => conditions )
end
Run Code Online (Sandbox Code Playgroud)