2015-10-21 90 views
1

         在不涉及Activerecord的情況下手動更改模型的外鍵值是否是一種很好的做法?這種方法更快,因爲更少的數據庫調用正在執行?手動更改外鍵值是否是一種很好的做法?

例子:

## Changing value by hand 
item = Item.all.first 
item.list_id = params[:other_list_id] # Assigning to foreign key field directly 
item.save 

## Changing value with the help of Activerecord 
item = Item.all.first 
item.list = List.find(params[:other_list_id]) 
item.save 

回答

1

絕對沒有區別,除了數據庫調用。

這取決於您想如何處理查詢 - 使用對象來填充關聯數據更爲常規,但這絕非必要。

我們常常合併PARAMS:

def update 
    @item = Item.find params[:id] 
    @item.update item_params 
end 

private 

def item_params 
    params.require(:item).permit(:item, :params).merge(list_id: params[:other_list_id]) 
end 

最後,你能做的最好的事情是讓你的代碼高效 ...如何充分利用最少的。

0

的方法可能是快,你是對的,需要較少的數據庫調用,但你不是這裏做的是檢查的LIST_ID實際上確實存在第一後,可能導致錯誤上。 (通常我永遠不會相信用戶輸入並始終先驗證它。)

如果採用這種方法,可能值得在Item模型中添加一些驗證以檢查列表ID是否存在,然後再保存該項目。

Scott

+0

1)安全性不是我當前項目的關注點。 2)list_id將始終存在,因爲它是一個模型字段,我只是試圖覆蓋所有內容。感謝您的迴應! –

+1

@AlexanderLomia,但如果我手動將'params [:other_list_id]'更改爲-1,它將更新記錄並顯示錯誤的id,並且會導致應用程序崩潰。 – MrYoshiji

相關問題