[英]How should I use nested attributes with simple_form, Rails 4, and has_many?
我正在嘗試使用simple_form
創建一個對象及其與Rails 4的has_many
關聯之一。
這是我到目前為止的內容:
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_fileds_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 %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.