我的用户模型具有多态关系。我正在使用Devise。
当我尝试编辑用户的详细信息时,出现以下错误:
undefined method `primary_key' for ActiveSupport::HashWithIndifferentAccess:Class
通过表格提交的数据是:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"Ap0JP2bs/w9J6iI9rZahiKR1K8UEIi7rp33a4OutMbo=",
"user"=>{"email"=>"[email protected]",
"rolable"=>{"first_name"=>"Cristian",
"last_name"=>"Gavrila",
"city"=>"16"}},
"commit"=>"Update"}
控制器方法是:
def update
@user = User.find(current_user.id)
if @user.update_attributes(params[:user])
redirect_to edit_user_registration_path, notice: 'Your profile was successfully updated.'
else
redirect_to edit_user_registration_path, error: "Something went wrong, couldn't update your profile!."
end
end
型号:
1.用户
class User < ActiveRecord::Base
belongs_to :rolable, :polymorphic => true
# Devise business
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :remote_avatar_url, :avatar, :login, :username, :email, :password, :password_confirmation, :remember_me
# For authenticating with facebook
attr_accessible :provider, :uid, :rolable
devise :omniauthable, :omniauth_providers => [:facebook]
# For authenticating with both username or email
attr_accessor :login
# Upload avatar
mount_uploader :avatar, AvatarUploader
# Makes username necessary
validates :username, :presence => true
end
2.客户
class Customer < ActiveRecord::Base
has_one :user, :as => :rolable
has_one :preferences, :class_name => "CustomerPreferences"
belongs_to :city
attr_accessible :first_name, :last_name
end
有什么问题?
最佳答案
根据您的请求哈希,您将rolable
属性传递为:
"rolable"=>{"first_name"=>"Cristian",
"last_name"=>"Gavrila",
"city"=>"16"}
除非指定
User
模型接受rolable
的嵌套属性,否则您不能这样做。但是,您已经将User
设置为属于Rolable
,而不是相反。嵌套属性不是为处理这种逆关系而设计的-您可能需要重新考虑在此要完成的工作,并相应地修改该关系。例如,您可能想将您的哈希值反过来,并传递
rolable
属性和嵌入其中的user
属性。或者,您可能希望将rolable
转换为has_one关联。