2012-11-20 38 views
0

c是任何東西,(或無)是:Rails的ActiveRecord的,檢查零

if !c.nil? 
    true 
else 
    false 
end 

同爲

if c 
    true 
else 
    false 
end 

而且,:

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

同as:

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

從Java背景來看,傳遞給#where()的散列方法是否提供了轉義?使用其中一種還是有優勢的?

回答

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

+0

謝謝。我一直使用'if!c.nil?',因爲它更加明確,而且我覺得這樣更難閱讀。 – Bill