2016-02-20 77 views
0

我試圖用simple_form創建一個對象及其has_many協會之一使用Rails 4我應該怎樣使用嵌套的屬性與simple_form,軌道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沒有渲染表單元素。

+0

你的公會是'has_many'(意爲應用是複數'applications'),因此使用'F。 simple_fields_for:應用程序執行| a | ...' – vee

+0

@vee我已經試過了,但後來simple_fields沒有呈現與應用程序在所有相關的表單元素。如在,我只看到用戶字段(名稱),而不是應用程序字段(over_18)。 –

+1

右所以,在你的'UsersController'的'new'動作不顯示或你沒有它定義。如果您已經定義了它,請確保將用戶的應用程序構建爲「@ user.applications.build」。 – vee

回答

1

一些改動應該解決您的問題:

  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 %>