2015-05-18 62 views
1

我使用rails 3.2.11和ruby 1.9.3。 我有一個緩慢的頁面,我知道我有很多方法來優化它。目前我主要關注update_attributes方法。創建方法還是更新更快?

這裏是我的代碼:

def create 
    @user = current_user 
    @demo = @user.demos.new 

    race_ethnicity_response = [] 
    params[:race_ethnicity_response].each do |response, value| 
    race_ethnicity_response << response if value != '0' 
    end 

    params[:demo][:race_ethnicity_response] = race_ethnicity_response.join(', ')[0, 254] 
    @demo.update_attributes(params[:demo]) 
end 

或者我應該使用類似的構建和挽救或創造?

@demo = @user.demos.build 
... 
@demo.save! 

或者

@users.demos.create!(params[demo]) 

我很好奇這是更快。我知道如果它節省了2ms,那麼我應該使用更多代碼正確/可讀的。

+0

沒關係。我敢打賭,他們會發出相同的SQL命令 –

+0

update_attributes並保存可能會產生相同的SQL,但是如果update_attributes在進行sql調用之前做了很多檢查呢?或其他事情。 – sonnyhe2002

+0

頁面有多慢?你能從控制檯上發佈你的日誌顯示速度嗎? – fatfrog

回答

0

在這樣一個小操作上,你不會看到太多的性能差異。追求可讀性+可維護性。上面的代碼似乎有點散亂,特別是中間塊。儘管我可能會錯過與params [:race_ethnicity_response]循環相關的內容,但這是一個直接的方法。

@demo = Demo.new(:params) 
@demo.race_ethnicity_response = race_ethnicity_response.reject{|i| i == 0 }.join(', ')[0, 254] 
current_user.demos << @demo 
+0

for race_ethnicity_response我需要首先刪除所有'0' – sonnyhe2002

+0

已更新。無法測試它,但你明白了。 – errata

+0

不「race_ethnicity_response」是一個散列 – sonnyhe2002