2016-10-26 14 views
1

Rails 5アプリで入れ子にしたフォーム用の繭の宝石を設定しようとしています。Rails、Cocoon Gem - NilClass用の未定義メソッド `reflect_on_association ':クラス

私は、他の人が投稿したという問題がありますが、彼らのために働く解決策は私のために働いていないようです。

住所、組織、設定のモデルがあります。団体は以下のとおりです。

住所

belongs_to :addressable, :polymorphic => true, optional: true 

組織

has_many :addresses, as: :addressable 
     accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true 

設定

has_many :addresses, as: :addressable 
    accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true 

マイ設定コントローラがあります。

def setting_params 
     params.require(:setting).permit(:newsletter, 
     addresses_attributes: [:id, :description, :unit, :building, :street_number, :street, :city, :region, :zip, :country, :time_zone, :latitude, :longitude, :_destroy] 
     ) 
    end 

私のルートは以下のとおりです。

resources :organisations do 
    namespace :contacts do 
    resources :addresses 
    resources :phones 
    end 
    end 

resources :users, shallow: true do 
    scope module: :users do 
     resources :assign_roles 
     resources :identities 
     resources :org_requests 
     resources :profiles 
     resources :settings do 
     namespace :contacts do 
      resources :addresses 
      resources :phones 
     end 
     end 
    end 

マイアドレスフォームがあります

マイ設定フォームがあります

<%= simple_form_for [@user, @setting] do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.input :newsletter, as: :radio_buttons, label: "Subscribe to our newsletter" %> 

    <%= simple_fields_for :addresses do |f| %> 
      <%= f.error_notification %> 
       <%= render 'contacts/addresses/address_fields', f: f %> 
      <%= link_to_add_association 'Manage address', f, :addresses, partial: 'contacts/addresses/address_fields' %>  
     <% end %> 
    </div> 
<% end %> 

エラーは言う:

undefined method `reflect_on_association' for NilClass:Class 

この行が強調表示されていますエラーメッセージ:

   <%= link_to_add_association 'Manage address', f, :addresses, partial: 'contacts/addresses/address_fields' %>   

他の点では、問題は複数形の代わりに単数形を使用していました。または@addressesの代わりに使用して:アドレス(解決策のいくつかは、その代わりに、@のはずが示唆されているものの:。

私はそれぞれの組み合わせでこれらのそれぞれを試してみました

誰もが私が必要なものを見ることができます。これを設定するのですか?

私は属性がフォームに異なる方法で処理する必要があるネストされたシンプルな形式のドキュメントから参照することができ

EDMUNDの提案を取りますいずれかの作業をdoesntの

<%= simple_fields_for "addresses_attributes[]", address do |f| %> 

https://github.com/plataformatec/simple_form/wiki/Nested-Models#example-for-strong-parameters

210は私がにフォームを変更してみました。私は検査するページをレンダリングできません。

この文脈のエラーラインは、組織コントローラの新しいアクションに関する問題を指しています。それが持っている:

def new 
    @organisation = Organisation.new 
    @organisation.addresses_build 
    end 

エラーメッセージは言う:

undefined method `addresses_build' for #<Organisation:0x007fcf6ff25f08> 
Did you mean? addresses 

私が代わりにアドレスのaddress_attributesを構築する必要がある場合、私は今のだろうか。しかし、私が試してみると、エラーが表示されます:

undefined method `addresses_attributes_build' for #<Organisation:0x007fcf72c26d68> 
Did you mean? addresses_attributes= 
+0

あなたのモデルは 'Setting'か' Settings'ですか? – SteveTurczyn

+0

setting.rb ................ – Mel

答えて

0

あなたが

f.simple_fields_for :addresses 

fフォームを指し書かなければならない、とあなたは、これがすべての子-アドレスを反復処理できるようにする必要があります。

そして第二に、ループのlink_to_add_association外を持っている方が良いです(すでに1がある場合はそうでないあなただけの新しいアドレスを追加することができますか?)

ので

<%= f.simple_fields_for :addresses do |f| %> 
    <%= render 'contacts/addresses/address_fields', f: f %> 
<% end %> 
<%= link_to_add_association 'Manage address', f, :addresses, partial: 'contacts/addresses/address_fields' %>  

(のようなものを書きますあなたがシンプルフォームのドキュメントで参照している例は古く、精巧なフォームは必要ありません)

1

このエラーはActive Recordからのものです。 Rails 4.2.7でのこのメソッドのドキュメントです。コクーンは、あなたの多型モデルの所有者のクラスを識別するために、これを使用している

http://apidock.com/rails/v4.2.7/ActiveRecord/Reflection/ClassMethods/reflect_on_association

レール5に大きな変化すべきではありません。これはコンソールで次のようにして確認できます。

Address.reflect_on_association(:addressable) 

これはあなたにポリモーフィックな関連反射

Address.reflect_on_association(:setting) 

これは

nilを返します。そして、あなたのaccepts_nested_attributes_forは、子供/属するクラスを見つけるために、その方法に依存しているを与えるでしょう。ここでソースコードを参照してください。

http://apidock.com/rails/v4.2.1/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for

そして、あなたのフォームは設定でアドレスを入れ子にしています。したがって、親/所有者クラスを見つけることができません。

+1

これは、自分のアドレスモデルのアドレス可能な値に設定/組織IDを割り当てるために何かする必要があることを意味しますか?私はこのエラーを得るために間違って何をしたのか分からない。 – Mel

+1

@Mel正確な構文は覚えていません。 'simple_fields_for:addresses_attributes'を試してください –

+0

ありがとうございます。それはどちらもうまくいきません。繭のドキュメントは言う:f.simple_fields_for:tasks do | task | - これは私がやったことです - しかし、それは働きません。 – Mel

関連する問題