Ruby on rails RubyonRail:添加多态地址以设计用户

Ruby on rails RubyonRail:添加多态地址以设计用户,ruby-on-rails,devise,polymorphic-associations,Ruby On Rails,Devise,Polymorphic Associations,这里是ROR新手。:-) 我正在使用Deviate进行身份验证,并已将名字和姓氏添加到Deviate创建的用户模型中。我还创建了地址模型: 创建表:地址不可用| t、 字符串:line1 t、 字符串:line2 t、 字符串:城市 t、 字符串:state t、 整数:可寻址\u id t、 字符串:可寻址类型 t.timestamps end add_index :addresses, [:addressable_type, :addressable_id], :unique =>

这里是ROR新手。:-)

我正在使用Deviate进行身份验证,并已将名字和姓氏添加到Deviate创建的用户模型中。我还创建了地址模型: 创建表:地址不可用| t、 字符串:line1 t、 字符串:line2 t、 字符串:城市 t、 字符串:state t、 整数:可寻址\u id t、 字符串:可寻址类型

  t.timestamps
end

add_index :addresses, [:addressable_type, :addressable_id], :unique => true 
结束


位于views/shared/_address.html.erb的部分地址





user.rb has_one:address,:as=>:addressable

#包括默认设计模块。其他可供选择的项目包括: #:token_authenticable、:encryptable、:confirmatible、:lockable、:timeoutable和:omniauthable 设计:数据库可验证,可注册, :可恢复,:可记忆,:可跟踪,:可验证

#设置模型的可访问(或受保护)属性 属性可访问:电子邮件、:密码、:密码确认、:记住我、:名字、:姓氏 属性可访问:地址属性

接受:address、:update\u only=>true的\u嵌套\u属性 在views/design/registrations/new.html.erb和edit.html.erb添加了以下行


'共享/地址',:locals=>{:f=>address}%>


'共享/地址',:locals=>{:f=>address}%>


现在我想让Desive在新用户注册时创建一个地址。用户可以在登录后填写地址。显然有什么东西不见了,或者我做错了。注册或编辑时不显示地址字段


请分享你的智慧。提前谢谢

字段的一般行为是,除非相关对象已经存在,否则它不会显示在表单中。例如,如果我们是在Desive的上下文之外发言,那么要在新的用户表单上显示地址,您将有如下内容:

# users_controller.rb
def new
   @user = User.new
   @user.address = Address.new
end
然后地址会显示在表单上

考虑到这是一个Desive管理的表单,并且您不能直接访问所需的控制器,我猜最好的方法是使用ActiveRecord回调来实例化一个地址(如果它还不存在)。比如说

# user.rb
after_initialize :create_address

def create_address
    self.address = Address.new if self.address.nil?
end

谢谢@madomausu,我已将回调添加到user.rb。当新用户注册时,它会创建一个新地址。(id,created,空字段为nil,addressable=>user)尽管服务器显示它加载了address并呈现了shared/_address.html.erb,但address partial仍不会在编辑注册页面上呈现。我会仔细研究设计/注册,看看我是否做了什么around@DiZee你成功地创造了这个吗?