我有一个具有嵌套位置属性的用户模型。我正在尝试在注册时分配地址。由于他们没有地方放置他们的地址,我想默认使用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 位置(#85361712)预计,获得ActiveSupport :: HashWithIndifferentAccess(#38238360)
我很确定这只是合并中语法的一个简单问题。我试过了
location: [ :full_address => request.remote_ip ]
[:location][:full_address] => request.remote_ip
params[:location][:full_address] => request.remote_ip
不确定还有什么可以尝试。
答案 0 :(得分:0)
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
我决定不合并,这很好。
答案 1 :(得分:0)
另一种方法是使用ActiveRecord
中的before_create
callback:
#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