我有一个名为Company的简单模型,其中包含姓名,联系电子邮件,地址等属性。我创建了一个搜索表单,用户可以通过搜索任何属性来查找公司,例如,城市,名称商业等。
我是Rails的新手,但我已经弄清楚如何在我的控制器中让它像这样工作。
if(params[:searchstring].present?)
logger.debug "*** Running search --> "
term = params[:searchstring]
@companies = Company.where('name LIKE ? OR name LIKE ? OR contactemail LIKE ? OR city LIKE ?' , "%#{term}%", "%#{term}%", "%#{term}%","%#{term}%" ).paginate(page: params[:page]).order('id DESC')
else
logger.debug "*** Running search --> get em all "
@companies = Company.all.paginate(page: params[:page], per_page: 5).order('id DESC')
end
end
这很好但我猜测有一种更简单的方法。我每次添加属性时都不想修改查询。关于如何改进这个的任何想法?
答案 0 :(得分:1)
你可以选择这样的东西(这只是一个例子,可能是一种更好的方式,但它是最好的方式)
# company.rb
def self.search_all_properties term
query = ''
properties = Company.column_names
properties.each_with_index do |prop, index|
if index < properties.count - 1
query = query + prop + ' LIKE :term OR '
else
query = query + prop + ' LIKE :term'
end
end
term = "%" + term + "%"
Company.where(query, :term => term)
end
并像这样使用
Company.search_all_properties term