ROR新手在这里 . :-)
我正在使用Devise进行身份验证,并将first_name和last_name添加到由devise创建的User模型中 . 我还创建了地址模型:
create_table:地址do | t | t.string:line1 t.string:line2 t.string:city t.string:state t.integer:addressable_id t.string:addressable_type
t.timestamps
end
add_index :addresses, [:addressable_type, :addressable_id], :unique => true
结束
a views at views / shared / _address.html.erb
user.rb
has_one:address,:as =>:可寻址
#包括默认设计模块 . 其他可用的是:#:token_authenticatable,:encryptable,:confirmable,:lockable,:timeoutable和:omniauthable devise:database_authenticatable,:registerable,:recoverable,:rememberable,:trackable,:validatable
#为您的模型设置可访问(或受保护)属性attr_accessible:email,:password,:password_confirmation,:remember_me,:firstname,:lastname attr_accessible:address_attributes
accepts_nested_attributes_for:address,:update_only => true
在views / devise / registrations / new.html.erb和edit.html.erb中添加了以下行
<%f.fields_for:地址do |地址|%> <%=渲染:部分=>'共享/地址',:locals => {:f =>地址}%>
<%end%>
<%end%>
<%f.fields_for:地址do |地址|%> <%=渲染:部分=>'共享/地址',:locals => {:f =>地址}%>
<%end%>
<%end%>
现在我想让Devise在新用户注册时创建一个地址 . 并且用户可以在登录后填写地址 . 显然缺少某些东西或者我做错了 . 地址字段不会显示在sign_up或编辑 .
请分享你的智慧 . 提前致谢 .
1 回答
fields_for的一般行为是关联对象不会在表单中显示,除非它已经存在 . 例如 . 如果我们在Devise的上下文之外发言,那么为了让地址显示在新的用户表单上,你会得到类似的东西:
然后地址将显示在表单上 .
鉴于这是一个由Devise管理的表单,并且您无法直接访问必要的控制器,我猜测最好的办法是使用ActiveRecord回调来实例化一个地址(如果它已经不存在) . 例如 . 就像是