手动更改外键值是一个好习惯吗?

时间:2015-10-21 13:40:26

标签: ruby-on-rails rails-activerecord

在不涉及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

2 个答案:

答案 0 :(得分:1)

除了db调用之外,绝对没有区别。

这取决于您希望如何处理查询 - 使用对象来填充关联数据会更常规,但这绝不是必需的。

我们经常合并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

最后,您可以做的最好的事情就是让您的代码高效 ......充分利用您的代码。

答案 1 :(得分:0)

这种方法可能很快,因为你是对的,需要的数据库调用较少,但你在这里做的是检查list_id是否确实存在,这可能会导致以后的错误。 (通常我永远不会相信用户输入并始终首先验证它。)

如果采用这种方法,可能值得在Item模型中添加一些验证,以在保存项目之前检查列表ID是否存在。

斯科特