2016-10-18 10 views
1

のRuby on Railsを使用すると、次のように":has_many"という関連付けは変更できません。私は3つのテーブルで働いている

article.rb

class Article < ActiveRecord::Base 
    has_many :comments 
    has_many :comentarios, :through => :comments 
end 

comment.rb

class Comment < ActiveRecord::Base 
    belongs_to :article 
    has_many :comentarios 
end 

とcomentario.rb

class Comentario < ActiveRecord::Base 
    belongs_to :article 
end 

私は 'comentario'を追加しようとしてからこれを返すまでうまく動作しますエラー

ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection in ComentariosController#create 
Cannot modify association 'Article#comentarios' because the source reflection class 'Comentario' is associated to 'Comment' via :has_many. 

は、これは私が新しい「comentario」

comentarios_controller.rb

class ComentariosController < ApplicationController 

    def new 
     @comentario = Comentario.new 
    end 

    def create 
    @article = Article.find(params[:article_id]) 
    @comentario = @article.comentarios.create(comentario_params) 
    redirect_to article_path(@article) 
end 

private 
    def comentario_params 
    params.require(:comentario).permit(:comentador, :comentario) 
    end 
end 

出力は私が@articleを呼び出してから@comentarioを作成する行にエラーを返す作成するために使用するコードですRubyのドキュメントでcomentarioarticleに関連付けると、:throughを使用しているので、私は単に@article.comentarioのように呼び出すことができます

このエラーの原因は何ですか? またはこの関連付けを他の方法で達成する方法についてご提案がありますか?

答えて

1

問題は、Railsがここで使用する記事を混同していることです。

あなたCommentモデルbelongs_to :articleだけでなく、あなたのCommentariobelongs_to :article ...ので、あなたが@article.commentariosを使用する場合 - それは、物品は、コメントの記事やcommentarioの物品を指すかどうかについての混乱です。

あなたが参照していることをより明確にするために、おそらくフォームを更新する必要があります。 commentarioのフォームには実際に作成するコメントのフィールドが含まれていなければなりません。

他の誰かが同じ問題を抱えていました。 "Cannot modify association because the source reflection class is associated via :has_many"

+1

これは役に立ちました。これは参考になりました。いくつかの変数名を変更する必要があったのは、レールだけでなく、私にとっても紛らわしいことでした。また、あなたがここでリンクした問題は非常に面倒だった。 –

関連する問題