在Rails中,我需要在同一个表单中一次更新n条记录(每条记录都有你要更新的日期字段)。为此,我尝试使用这个def:
def marcado
set_previsao
confs = @previsao.previtems.where(status: "Confirmado").index_by{|previtem| previtem[:id]}
confs.each do |id, attributes|
previtem = @previsao.previtems.find(id)
previtem.update(attributes)
end
这样做,它会返回以下错误消息:
参数错误:在分配属性时,必须将散列作为参数传递。
因为confs变量是一个散列。
另外,如果我这样做:
def marcado
set_previsao
confs = @previsao.previtems.where(status: "Confirmado").pluck(:id).map { |id| [id, {status: "Marcado", data_marcacao: params[:data_marcacao]}] }.to_h
confs.each do |id, attributes|
previtem = @previsao.previtems.find(id)
previtem.update(attributes)
end
使用前一个def的行,所有记录都保存为最后一个记录值。
我哪里错了?
1条答案
按热度按时间rur96b6h1#
看起来你可能没有利用某些rails特性。而且你没有真正提供足够的信息来提供最好的建议。
如果所有这些记录都属于某个主记录,那么您应该进行调查
https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#method-i-accepts_nested_attributes_for
如果它们与某个主记录无关,则可以查看
https://api.rubyonrails.org/classes/ActiveRecord/Persistence/ClassMethods.html#method-i-upsert