Ruby on rails 3 Rails ActiveRecord,正在检查是否为零

Ruby on rails 3 Rails ActiveRecord,正在检查是否为零,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,设c为任意值,(或nil)为: 同 if c true else false end 此外,是: Model.where(:name => params[:foo]) 同: Model.where('name = ?', params[:foo]) 来自Java背景,传递给#where()的散列方法是否提供转义?使用一个或另一个是否有好处?在这两种情况下,是的,它们是相同的。此外,是的,散列格式确实提供转义。它实际上会做更多的事情,这取决于参数[:foo]是否是一个列表,它会

c
为任意值,(或nil)为:

if c
  true
else
  false
end
此外,是:

Model.where(:name => params[:foo])
同:

Model.where('name = ?', params[:foo])

来自Java背景,传递给#where()的散列方法是否提供转义?使用一个或另一个是否有好处?

在这两种情况下,是的,它们是相同的。此外,是的,散列格式确实提供转义。它实际上会做更多的事情,这取决于
参数[:foo]
是否是一个列表,它会在
=
中的
之间变化(可能还会有更多的事情)

将来,通过使用
to_SQL
方法,您可以很容易地看到AREL语句生成了什么样的SQL

Model.where(:name=>params[:foo])to_sql

通常,约定是在足够时使用哈希语法。它通常更容易阅读,尤其是当您有涉及多个模型的查询时。例如:


Model.joins(:other_Model)。其中(:name=>params[:foo],:other_Model=>{:attr=>params[:bar]})

谢谢。我一直使用
if!c、 nil?
因为它更明确,我发现这更难理解。
Model.where('name = ?', params[:foo])