让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() 的哈希方法是否提供转义?使用其中一个有优势吗?
让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() 的哈希方法是否提供转义?使用其中一个有优势吗?
在这两种情况下,是的,它们是相同的。另外,是的,哈希格式确实提供转义。它实际上会做更多的事情,这取决于是否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]})