繁体   English   中英

在sign_up上分配嵌套属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM