让c
成为任何东西,(或零)是:
if !c.nil?
true
else
false
end
与
相同if c
true
else
false
end
另外,是:
Model.where(:name => params[:foo])
与:
相同Model.where('name = ?', params[:foo])
来自Java背景,传递给#where()的哈希方法是否提供了转义?使用其中一个是否有优势?
答案 0 :(得分:1)
在这两种情况下,是的,这些是相同的。此外,是的,散列格式确实提供了转义。它实际上会做更多的事情,具体取决于params[:foo]
是否是一个列表,它会在=
和in
之间发生变化(可能还有更多的事情)。
将来,您可以使用to_sql
方法轻松查看AREL语句生成的SQL。
Model.where(:name => params[:foo]).to_sql
通常,惯例是在足够的时候使用哈希语法。它通常更容易阅读,尤其是当您有涉及多个模型的查询时。例如:
Model.joins(:other_model).where(:name => params[:foo], :other_model => {:attr => params[:bar]})