

以下のリレーションのmodelがあります。

[code]

    class Question
      has_many :answeres
      accepts_nested_attributes_for :answeres
    end
    
    
    class Answere
      belongs_to :question
    end
    
    
[/code]

そのような前提の中、controller内で、  
@question.answeres.attributes  
としようとすると、

NoMethodError: undefined method `attributes' for
#Answere::ActiveRecord_Associations_CollectionProxy

というエラーが出ます。

[code]

    ※  ApplicationControllerは継承しております。記号をつけると、うまく表示されないため、省略
    
    class QuestionsController
      @question.answeres.attributes = answere_params
    
      private
    
      def answere_params
        xxxxxx
      end
    end
    
    
[/code]

1対1のリレーションの時では、attributesメソッドは使用できるのですが、今回のような1対多の関係では、どのように実装するのが一般的なのでしょうか？

なお、answere_paramsの実装は、デバッグ中に確認しており、動作は問題ありません。  
期待する値が入っているのですが、それを、最終的に、answere内につめこみ保存したいです。

不足点がございましたら補足致します。

宜しくお願いします。


CC BY-SA 3.0
2016-03-24T09:02:53.130
23416
2016-04-23T11:09:39.683
13175
question
ruby-on-rails ruby
1対多の関係の際に、attributesメソッドがつかえず、次のエラーがでます。NoMethodError: undefined method `attributes' for #Answere::ActiveRecord_Associations_CollectionProxy


`@question.answers`は `answer`のコレクションになるので、`answer`
の`attributes`を取得したい場合は以下のように呼び出せば良いと思います。

[code]

    @question.answers.first.attributes
    
[/code]

また`@questions`に新しい`answer`を追加するには幾つかの方法がありますが、`build`を利用してみるはいかがでしょうか。

[code]

    @anwser = @question.answers.build(answer_params)
    if @anwser.save
    …
    else
    …
    end 
    
[/code]

参考: [Railsガイド 4.3.1.14 collection.build(attributes = {},
...)](http://railsguides.jp/association_basics.html#has-
many%E3%81%A7%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%82%8B%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89-collection-
build-attributes)


CC BY-SA 3.0
2016-03-24T09:52:49.613
23418
2016-03-24T09:52:49.613
2646
23416
answer