在不涉及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
答案 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是否存在。
斯科特