我正在使用复杂的嵌套表单。 我有3个型号
位置
class Location < ActiveRecord::Base
has_many :events
has_many :profiles
geocoded_by :address
end
资料
class Profile < ActiveRecord::Base
belongs_to :user
accepts_nested_attributes_for :user
belongs_to :location
accepts_nested_attributes_for :location
end
用户(设计)
class User < ActiveRecord::Base
has_one :profile, dependent: :destroy
accepts_nested_attributes_for :profile
end
在我的用户/新视图中
= form_for @user, validate: true, url: user_registration_path, html: { class: 'new-user form-default' } do |f|
= f.fields_for :profile do |p|
= p.fields_for :location do |build|
= build.text_field :address, :input_html =>{:id => 'geo-input-address', :value => current_user.city.name}
我的问题是地址字段不可见,为什么不进行渲染?
答案 0 :(得分:0)
创建新用户时,该用户还没有个人资料或位置。 fields_for
遍历现有项目。
您override the devise controllers,然后在new
操作中,您可以编写如下内容:
def new
@user = User.new
@user.build_profile
@user.profile.build_location
end
因此,您为@user
- 对象提供了空配置文件和空位置,因此您的用户可以将其填入。
稍微容易一些,但在视图中要做的有点脏(那时你不需要覆盖设计控制器)。