0

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() 的哈希方法是否提供转义?使用其中一个有优势吗?

4

1 回答 1

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]})

于 2012-11-21T02:01:17.963 回答