2

我正在运行一个非常令人困惑的错误。
我正在尝试提交具有嵌套属性的表单 - 我正在通过 Rails 4 中的 strong_params 将它们列入白名单。

每当我尝试提交表单时,都会收到此错误:

ActiveRecord::UnknownAttributeError - 未知属性:电子邮件:

我的用户模型具有以下设置:

用户控制器.rb

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

这给了我以下参数:

{"email"=>"martin@teachmeo.com", "profile_attributes"=> {"first_name"=>"Martin", "last_name"=>"Lang", "website"=>"", "birthdate"= >"", "描述"=>""}}

我的用户模型如下所示:

用户(id:整数,电子邮件:字符串,password_digest:字符串,created_at:日期时间,updated_at:日期时间,auth_token:字符串)

有趣的是,如果我尝试通过 pry 调试它,@user.update_attributes(profile_params) 可以正常工作。

4

1 回答 1

3

你在打电话

@user.profile.update_attributes!(profile_params)

这意味着您正在更新Profile (我假设那是模型名称)的实例上的属性,而不是 User. 正如您所指出的,是模型上的一列,而:email不是模型。您正在尝试将 key 的值应用于没有的列,因此出现错误。UserProfile:email@user.profileProfileActiveRecord::UnknownAttributeError - unknown attribute: email:

我会猜测而不是上面你真正想要的

@user.update_attributes!(profile_params)

既然User:email属性,也可能有accepts_nested_attributes_for :profile设置。

于 2013-04-17T04:19:07.947 回答