2015-12-10 66 views
0

如何編寫find_or_create_by方法創建或找到的字段clicktime,因此在24小時內創建的點擊是唯一的?

創建方法:find_or_create_by Rails

description = Description.find(params[:id]) 
click = description.clicks 
     .find_or_create_by(clicktime: ___) 
Click.increment_counter(:count, click.id) 

顯示方法:

@descriptions = Description.includes(:clicks) 
.where(:clicks => { clicktime: (Time.now - 24.hours)..Time.now }) 
.order('count DESC') 

回答

0

相反find_or_create,你可以使用first_or_create

click = description.clicks.where(clicktime: ___).first_or_create 
+0

對不起,我忘了提,我想傳遞的時間範圍,如:'(Time.now - 24.hours).. Time.now'這是我的問題,因爲即使它可以檢查是否有這樣的記錄如果它不存在,方法不知道該寫什麼。我已經發布了這個案例的實施。 但是,謝謝你的回答! – TeTiRoss

0
description = Description.find(params[:id]) 
click = description.clicks. 
     find_by(clicktime: (Time.now - 24.hours)..Time.now) 

if click != nil 
    Click.increment_counter(:count, click.id) 
else 
    new_click = description.clicks.create(clicktime: Time.now) 
    Click.increment_counter(:count, new_click.id) 
end 
+0

由我自己決定。只要先檢查是否存在這樣的記錄,然後更新或創建新記錄。沒有'find_or_create_by'工作。 – TeTiRoss

相關問題