簡體   English   中英

如何將嵌套屬性與simple_form,Rails 4和has_many一起使用?

[英]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沒有呈現表單元素。

進行一些更改可以解決您的問題:

  1. 確保@user對象在呈現表單之前已構建了一個application實例。
  2. 確保使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM