如果设置了源值,我经常需要分配一个变量。到目前为止,我这样做了:
filters[:red] = params[:search][:red] unless params[:search][:red].nil?
这有效,但看起来有点笨拙。必须有更干的方法来获得这个结果。
有什么建议吗?
祝你好运。 AsbjørnMorell。
答案 0 :(得分:2)
如果你发现自己做了很多这样的事情,你可以写一个小帮手方法:
def set_unless_nil(hsh, key, val)
hsh[key] = val unless val.nil?
end
然后:
set_unless_nil filters, :red, params[:search][:red]
如果源和目标哈希中的键经常是相同的,你可以写:
def copy_key_unless_nil(src_hash, key, dest_hash)
dest_hash[key] = src_hash[key] unless src_hash[key].nil?
end
然后:
copy_key_unless_nil params[:search], :red, filters
或者您可以将值设置为Hash,然后在最后整理散列以删除所有具有nil值的键:
filters.delete_if { |k, v| v.nil? }
答案 1 :(得分:0)
它已经相当不错了,但它可能有点干......
red=params[:search][:red]
filters[:red]=red if red
它看起来有点整洁,并且仍然可以按你的意愿工作。永远记住你可以改写:
unless x.nil?
为:
if x
他们将评估相同,但后者稍微更模糊和更清洁
答案 2 :(得分:0)
如果params[:search][:red]
只能为零,因为它不在哈希值中,我会使用params[:search].has_key?(:red)
,以便随意的读者可以了解情况会更好。
答案 3 :(得分:0)
如果params [:search] [:red]只能是nil,因为它不在散列中,并且假设你想要将params [:search]中的所有内容复制到过滤器,那么:
filters.merge!(params[:search])