0

何でもしましょうc、(またはnil)は次のとおりです。

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(おそらくもっと多くのことも)。

今後は、メソッドを使用して AREL ステートメントが生成する SQL を簡単に確認できますto_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 に答える