2015-05-07 49 views
2

我想提交一個產品ID和零售商ID到我的控制器,如果組合在DB exisiting我想更新與提交的PARAMS該記錄,如果沒有,創建一個新的紀錄。find_or_create_by - 不更新

我的控制器,低於目前我可以看到,如果組合不存在的記錄被創建,但是當組合體被發現它選擇查詢和記錄不會被更新。

我怎樣才能得到它的更新,而不是隻選擇?

感謝

控制器:

 def AddNewPrice 
      @newPrice = ProductPrice.find_or_create_by(product_id: params[:product_id], retailer_id: params[:retailer_id])     
     end 

更新

Sorry..Just到所提到的,當我更新我想更新進來的PARAM價格屬性

+0

什麼是你想使用find_or_initialize_by記錄被發現的情況下更新?因爲我沒有看到任何額外的更新命令。找到的行將會有你正在查詢的值。 – Humza

回答

4

爲,從方法名其明確表示,它發現記錄匹配給定的條件,或者創建擁有的product_id一個新的記錄,retailer_id給出,如果記錄不存在。 你需要做一些這樣的事來更新記錄

def add_new_price 
    new_price = ProductPrice.find_or_create_by(product_id: params[:product_id], retailer_id: params[:retailer_id]) 
    new_price.update_attributes({attr: params[:attr]}) 
end 
+0

工作一種享受,謝謝 – Geraint

+0

這樣的產品價格將被創建,然後更新將運行兩個查詢,更新和三個查詢創建。 –

3

像法顧名思義它發現的objec如果它存在,並且創建,如果不存在。

如果您想更新的東西,你可以做這樣的事情:

def AddNewPrice 
    @newPrice = ProductPrice.find_or_create_by(product_id: params[:product_id], retailer_id: params[:retailer_id]) 
    @newPrice.my_attribute = 'updated value' 
    @newPrice.save 
end 
1

你正在試圖做的實際上是創造了紀錄如果product_idretailer_id的組合不存在的東西。如果它確實存在,那麼有什麼可以做..

如果你想,如果它存在更新的屬性或創建它,如果它不就可以一起update_attributes

def AddNewPrice 
    @newPrice = ProductPrice.find_or_initialize_by(product_id: params[:product_id], retailer_id: params[:retailer_id]) 
    @newPrice.update_attributes(price: "updated value")     
end 
+0

@Mischa固定.. –