型号:
order&材料
订单 has_many 材料
材料belongs_to order
材料&用户
材料 has_may 用户
用户 belongs_to 材料
假设我创建了一个id = 20,order_id = 1的材料
在material_controller更新操作中,我想将材质ID分配给特定用户。在materials_controller更新操作中,我这样做了
if @material.update_attributes(material_params)
if @material.ready == true
@users = User.where("is_manager = 't'")
@users.each do |user|
user.material_id = @material.id
end
end
end
但是在操作后,用户中的属性material_id没有被更改。 任何人都可以告诉我是什么原因导致未能将材料ID传递给用户?
答案 0 :(得分:0)
更改user.save
后,您还需要user.material_id
。
user.material_id = @material.id
user.save #Saves the changes
这改变了user
对象的属性,但更改尚未保留。它现在是一个陈旧的对象,它有一些属性已经改变。要保留这些属性,需要user.save
。
或者你可以使用update_attribute
,如下所示:
if @material.update_attributes(material_params)
if @material.ready
@users = User.where("is_manager = 't'")
@users.each do |user|
user.update_attribute(:material_id, @material.id)
end
end
端
答案 1 :(得分:0)
您可能需要查看update_all
。
update_all
更新一个 SQL语句中的所有记录,而不是将所有记录加载到内存中并向数据库发送N个更新查询。这使update_all
比迭代多个用户快得多。
if @material.ready
User.where(is_manager: 't').update_all(material_id: @material.id)
end
通常这是一个问题,update_all
在更新之前不会验证记录。但在这种情况下,这种行为实际上是首选。