我应该如何使用 simple_form、Rails 4 和 has_many 的嵌套属性?

How should I use nested attributes with simple_form, Rails 4, and has_many?

我正在尝试使用 simple_form 创建一个对象及其 has_many 关联之一与 Rails 4.

这是我目前的情况:

class User < ActiveRecord::Base
  has_many :applications
  accepts_nested_attributes_for :applications
end

class Application < ActiveRecord::Base
  belongs_to :user

  def self.allowed_params
      [:over_18]
  end
end

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new user_params
    @user.save
    # there is more in here, but I don't think it's relevant
  end

  private
  def user_params
    params.require(:user).permit(:name, :email, application: Application.allowed_params)
  end
end

最后是表格本身

<%= simple_form_for @user do |f| %>
  <%= f.input :name %>
  <%= f.simple_fields_for :application do |a| %>
    <%= a.input :over_18, label: 'Are you over 18?', as: :radio_buttons %>
  <% end %>
  <%= f.button :submit %>
<% end %>

每当我尝试使用此设置创建新用户时,我都会收到错误消息:ActiveRecord::UnknownAttributeError: unknown attribute 'application' for User.

问题:我应该更改什么才能使用嵌套应用程序创建新用户?

我试过将 f.simple_fields_for :application 更改为 f.simple_fields_for :applications,但是 simple_fields 没有呈现表单元素。

一些更改应该可以解决您的问题:

  1. 确保 @user 对象具有在呈现表单之前构建的 application 实例。
  2. 确保您使用 form_builder.simple_fields_for :applications,即复数 applications,因为您的协会是 has_many.

对您的用户控制器的更改:

class UsersController < ApplicationController
  def new
    @user = User.new
    @user.applications.build
  end
end

您的观点变化:

<%= f.simple_fields_for :applications do |a| %>
  <%= a.input :over_18, label: 'Are you over 18?', as: :radio_buttons %>
<% end %>