我遇到了一个非常令人困惑的错误 我正在尝试提交一个带有嵌套属性的表单 - 我通过Rails 4中的strong_params将这些列入白名单。
每当我尝试提交表单时,我都会收到此错误:
ActiveRecord :: UnknownAttributeError - 未知属性:email:
我的用户模型具有以下设置:
def update
if @user.profile.update_attributes!(profile_params)
respond_to do |format|
format.js
format.html { redirect_to edit_user_path(@profile.user) }
end
end
end
private
def profile_params
params.require(:user).permit(:email,
{:profile_attributes => [:first_name, :last_name, :website, :birthdate, :description,
{:address_attributes => [:city, :country, :phone]}]}
)
end
这给了我以下参数:
{ “电子邮件”=> “中martin@teachmeo.com”, “profile_attributes”=> { “first_name的”=> “中马丁”, “姓氏”=> “中郎”, “网站”=> “中”, “出生日期”=> “中”, “描述”=> “中”}}
我的用户模型如下所示:
User(id:integer,email:string,password_digest:string,created_at:datetime,updated_at:datetime,auth_token:string)
有趣的是,如果我尝试通过pry调试它,@ user.update_attributes(profile_params)可以正常工作。
答案 0 :(得分:3)
您正在致电
@user.profile.update_attributes!(profile_params)
这意味着您要更新Profile
实例的属性(我假设是型号名称),不 User
。正如您所指出的那样,:email
是User
模型中的一列,不是 Profile
模型。您正尝试将密钥:email
的值应用于@user.profile
,Profile
没有的列,因此ActiveRecord::UnknownAttributeError - unknown attribute: email:
错误。
我会猜测而不是上面你真正想要的
@user.update_attributes!(profile_params)
由于User
具有:email
属性,并且可能还设置了accepts_nested_attributes_for :profile
。