我应该如何使用 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 没有呈现表单元素。
一些更改应该可以解决您的问题:
- 确保
@user
对象具有在呈现表单之前构建的 application
实例。
- 确保您使用
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 %>
我正在尝试使用 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 没有呈现表单元素。
一些更改应该可以解决您的问题:
- 确保
@user
对象具有在呈现表单之前构建的application
实例。 - 确保您使用
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 %>