Ruby on rails 注册时指定嵌套属性

Ruby on rails 注册时指定嵌套属性,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我有一个具有嵌套位置属性的用户模型。我想在注册时分配一个地址。因为没有地方让他们放他们的地址,我想在默认情况下使用ip地址。我有定位和ip定位工作,但让设计接受参数是个问题 我已将此添加到我的注册控制器 class Users::RegistrationsController < Devise::RegistrationsController private def sign_up_params params.require(:user).permit(:email, :p

我有一个具有嵌套位置属性的用户模型。我想在注册时分配一个地址。因为没有地方让他们放他们的地址,我想在默认情况下使用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
我真的不知道还能尝试什么

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中使用:


尝试params.require:user.permit:email,:password,:password\u confirmation,location:{:full\u address=>nil}。合并位置:{:full\u address=>request.remote\u ip}或params.require:user.permit:email,:password,:password\u confirmation,location:{}。合并位置:{:full\u address=>request.remote\u ip}这不起作用,因为型号中没有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
#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