我尝试搜索rails模型中的以下字段:id,description,notes和customer_name。
在我的模型中TechServiceSpecial
:
def self.search(params)
q = "%#{params[:search].try(:strip).tr('%', '')}%"
#build up general search
general_search_fields.reduce(nil) do |running_query, field|
if field =~ /id/
main_check = arel_table[field].eq(q.to_i)
else
main_check = arel_table[field].matches(q)
end
if running_query.nil?
main_check
else
running_query.or(main_check)
end
end
end
private
def self.general_search_fields
%i(id description notes customer_name)
end
在我的控制器中(我使用Kaminari进行分页):
def search
specials = TechServiceSpecial.where(TechServiceSpecial.search(params))
@tech_service_specials = specials.page(params[:page]).per(200)
render 'index'
end
如果我使用id搜索,则无法找到记录。因此,如果我有一个ID为1005的记录,那么该记录将不会在' 1005'的搜索结果中返回,除非描述,注释或customer_name也恰好包含1005。
将返回在描述,注释或customer_name中碰巧有1005的任何记录所以,我调整控制器看起来像这样:
def search
specials = TechServiceSpecial.where(TechServiceSpecial.search(params))
specials.merge(TechServiceSpecial.where(id: params[:search].to_i))
@tech_service_specials = specials.page(params[:page]).per(200)
render 'index'
end
但我得到了同样的结果。不会返回ID为1005的记录。
如何让它返回一个id等于我正在搜索的字符串的记录?
答案 0 :(得分:0)
在var svg = d3.select("body").append("svg")
.attr("width", diameter*1.5)
.attr("height", diameter)
.attr("style", "outline: thin solid grey;")
.call(d3.behavior.zoom().on("zoom", function () {
svg.attr("transform", "translate(" + d3.event.translate[0] + "," + d3.event.translate[1] + ")" + " scale(" + d3.event.scale + ")")
}))
.append("g")
.attr("transform", "translate(" + radius*1.5 + "," + radius + ")")
//this is the part that I added.
.append("g")
方法中:
TechServiceSpecial.search
id的值始终为0,因为q = "%#{params[:search].try(:strip).tr('%', '')}%"
...
if field =~ /id/
main_check = arel_table[field].eq(q.to_i)
...
以"%"开头。
如果字段为q
,则应将q
设置为params[:search].to_i
。