[英]Assign nested attribute on sign_up
我有一个带有嵌套位置属性的用户模型。 我正在尝试在注册时分配地址。 由于没有地方可以放置他们的地址,因此我想默认使用ip地址。 我可以使用位置和ip地理定位,但是要设计出可以接受参数的方法才是问题。
我已将此添加到我的注册控制器
class Users::RegistrationsController < Devise::RegistrationsController
private
def sign_up_params
params.require(:user).permit(:email, :password, :password_confirmation, location: [ :full_address ]).merge(
location: { :full_address => request.remote_ip }
)
end
end
这是我目前正在获得ActiveRecord :: AssociationTypeMismatch Location(#85361712)的错误,得到了ActiveSupport :: HashWithIndifferentAccess(#38238360)
我很确定这只是合并中语法的一个简单问题。 我试过了
location: [ :full_address => request.remote_ip ]
[:location][:full_address] => request.remote_ip
params[:location][:full_address] => request.remote_ip
不太确定还有什么尝试。
private
def sign_up_params
params[:user][:location_attributes][:full_address] = request.remote_ip
params.require(:user).permit(:email, :password, :password_confirmation, location_attributes: [ :full_address ])
end
我决定不进行合并,并且工作正常。
另一种方法是在ActiveRecord
使用before_create
回调 :
#app/models/user.rb
Class User < ActiveRecord::Base
has_one :location
before_create :set_location
private
def set_location
self.location.build(full_address: request.remote_ip) unless self.location.full_address.present?
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.