rails 4 has_one嵌套表单尚未构建

chr*_*ris 0 ruby ruby-on-rails has-one nested-forms ruby-on-rails-4

我已经查看了有关stackoverflow和其他地方这个相当常见的问题的所有帖子,但我还没有找到答案.基本上我的嵌套表单没有构建,因此在我显示页面时不可见.

这是我的用户控制器的相关部分,users_controller.rb:

  def new
    @user = User.new
    @user.build_user_account
  end
Run Code Online (Sandbox Code Playgroud)

这是我user.rb文件中的相关部分:

class User < ActiveRecord::Base
      has_one :user_account, :class_name => "UserAccount"
      accepts_nested_attributes_for :user_account
Run Code Online (Sandbox Code Playgroud)

我的user_account.rb档案:

    class UserAccount < ActiveRecord::Base
      belongs_to :user
    end
Run Code Online (Sandbox Code Playgroud)

这是我的_form.html.erb档案:

<div class="field">
  <%= f.label :email %><br>
  <%= f.text_field :email %>
</div>
<div class="field">
  <%= f.label :password %><br>
<%= f.text_field :password %>
</div>
<div class="field">
  <%= f.label :password_confirmation %><br>
  <%= f.text_field :password_confirmation %>
</div>
<% f.fields_for :user_account, @user.user_account do |user_account| %> 
  <div class="field">
    <%= user_account.label :email %>
    <%= user_account.text_field :email %>
  </div>
  <div class="field">
    <%= user_account.label :password %>
    <%= user_account.text_field :password %>
  </div>
  <div class="field">
    <%= user_account.label :password_confirmation %>
    <%= user_account.text_field :password_confirmation %>
  </div>
<% end %> 
Run Code Online (Sandbox Code Playgroud)

前三个按预期显示,但三个表单字段user_account不显示.我已经尝试了一些我能在网上找到的东西,但我仍然无法解决问题所在 - 帮助将不胜感激!

tag*_*lia 5

我想你刚刚错过=f.fields_for线上的标志.试试这样:

<%= f.fields_for :user_account, @user.user_account do |user_account| %>
Run Code Online (Sandbox Code Playgroud)

@user.user_account不是必要的,但不会造成伤害.