我正在使用以下三个表:
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
的内容。
是否有导致此错误的原因? 或者您对如何以任何其他方式实现此关联有任何建议?
答案 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"