无法修改关联“:has_many”。在rails

时间:2016-10-18 19:49:58

标签: ruby-on-rails ruby ruby-on-rails-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

输出在我从调用@comentario创建@article的行中返回错误但我不明白为什么因为Ruby文档说我将comentario关联到{{1}使用article,我可以简单地调用类似:through的内容。

是否有导致此错误的原因? 或者您对如何以任何其他方式实现此关联有任何建议?

1 个答案:

答案 0 :(得分:1)

确定。问题是Rails对这里使用的文章感到困惑。

您的Comment模特belongs_to :article以及您的Commentario belongs_to :article ...所以,如果您使用@article.commentarios - 它是否会感到困惑本文引用评论文章或评论文章。

您可能需要更新表单,以便更明确地了解您所指的内容。 commentario的表单实际上应该包含它创建的注释的字段。

其他人在这里遇到同样的问题。您可以在此处查看解决方案:"Cannot modify association because the source reflection class is associated via :has_many"