class UsersController < ApplicationController
....
def update
if @user.update(edit_user_params)
flash[:success] = 'Profilo aggiornato correttamente'
redirect_to user_path(@user)
else
render action: 'edit'
end
end
....
private
def edit_user_params
params.require(:user).permit(:email, information_attributes: [:name, :surname, :date_of_birth, :address, :city, :country, :post_code, :phone])
end
end
正如你所看到的,我有嵌套表格。
Informatation模型由以下专栏组成:
在嵌套表单中,没有信用的输入字段,因为为了更新信用,我创建了另一个信用流。
问题如下,当rails @user.update(edit_user_params)
时,它会覆盖与特定用户相关的信息行的所有列,也就是说,如果在更新后信用额度为15美元,则它变为0。那会发生什么? update
方法不应仅更新()
中指向的列吗?
瘾,因为在Information.rb
我有以下验证:
validates :credit, numericality: { greater_than_or_equal_to: 0.01 }
我总是收到错误,因为credit
字段的结果等于0.0
答案 0 :(得分:2)
我以前遇到过这个问题。这是修复:
params.require(:user).permit(:email, information_attributes: [:id, :name, :surname, :date_of_birth, :address, :city, :country, :post_code, :phone])
您需要将:id添加到information_attributes。我不确定它有多安全(如果您发现,请告诉我),但它会解决问题。
答案 1 :(得分:0)
我怀疑你的edit_user_params功能妨碍了这项工作。为什么不在用户模型中使用验证,即validates :user, :presence => true
,然后直接将params传递给更新语句?此外,查看实际表单的代码可能会有所帮助。表格中有哪些字段?