双嵌套表单,设计和地理编码器没有显示

时间:2015-06-13 18:18:13

标签: ruby-on-rails devise

我正在使用复杂的嵌套表单。 我有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} 

我的问题是地址字段不可见,为什么不进行渲染?

1 个答案:

答案 0 :(得分:0)

创建新用户时,该用户还没有个人资料或位置。 fields_for遍历现有项目。

override the devise controllers,然后在new操作中,您可以编写如下内容:

def new
  @user = User.new
  @user.build_profile
  @user.profile.build_location
end

因此,您为@user - 对象提供了空配置文件和空位置,因此您的用户可以将其填入。

稍微容易一些,但在视图中要做的有点脏(那时你不需要覆盖设计控制器)。