ActiveRecord是否支持sql语句中的动态条件?

0 sql search activerecord ruby-on-rails conditional-statements

我想在Rails应用程序中进行SQL查询,该应用程序在添加下拉菜单时添加条件.显然,如果未选择下拉列表,我不想使用空白条件进行搜索.如何在SQL语句中开发动态条件?

未经测试的例子:

未选择下拉列表时:Object.find("billy"::conditions => {})

选择下拉列表时:Object.find("billy"::conditions => {"last_name =>"johnson"})

谢谢您的意见!

Top*_*gio 5

不太清楚你在做什么,但实现这一点的一般方法是让下拉值(不可见文本)成为你想要选择的对象的ID.如果您没有选择,那么您可以使用以下内容:

last_name = unless params[:object][:last_name]

conditions = []
conditions << "last_name = ?" unless last_name.blank?
conditions << last_name unless last_name.blank?

Object.find("billy", :conditions => conditions)
Run Code Online (Sandbox Code Playgroud)

查看此链接以了解有关ActiveRecord::Base.find()方法和使用它们的正确方法的更多信息.另请参阅此精彩指南,了解如何保护自己免受SQL注入攻击.

编辑1:修改后的代码更清晰.这种方法还具有能够轻松添加单独条件的优点,只需确保添加所有"something =?" 在添加关联值(param)之前.

编辑2:如果您还没有看到select表单助手,可以考虑将其用于下拉列表.让生活更轻松:-)