假设我有模型“汽车”和控制器“汽车”,以及方法“显示”。
我有多个属性,例如:
in_production
, year
, make
我可以轻松地执行类似的操作来查找与传递的所有参数相匹配的汽车:
def display
@cars = Car.find(:all, :conditions => { :in_production => #{params[:in_production]}, :year => #{params[:year]}, :make => #{params[:make]} })`
end
所以我正在做的是在菜单中编写硬链接,因此如果我想查找 2009 年生产的所有 Nissan 汽车,我会将这些值作为参数传递到链接中。
在另一页上,我想显示 2009 年生产中的每辆汽车,只有两个参数而不是三个。动态改变条件的最佳方法是什么,以便它可以使用一个、两个或三个参数,同时使用相同的操作?
有任何想法吗?
首先,使用
:conditions => "in_production = '#{params[:in_production]}' AND year = '#{params[:year]}' AND make = '#{params[:make]}'"
容易受到 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)