Rails - 如何将局部变量传递给共享文件夹中的部分变量?

Rails - How to pass a local variable to partial in a shared folder?

我正在尝试让评论显示在博客中 post。评论与 post 相关联。但我不知道如何将 @post.comments 传递给共享文件夹中的部分文件。

这是错误:

undefined method `body' for #<Comment::ActiveRecord_Associations_CollectionProxy:>

这是 show.html.erb 文件中的部分调用:

<%= render partial: 'shared/comment', locals: { comment: @post.comments } %>

这是 _comment.html.erb 部分:

<%= comment.name %>
<%= comment.body %>
<%= comment.created_at %>

评论模型迁移:

create_table :comments do |t|
  t.string :name
  t.text :body
  t.references :post, index: true, foreign_key: true

但模型不是问题,因为我可以使用简单的 <%= render @post.comments %> 并将 _comment.html.erb 部分放在 /views/comments/ 文件夹中。但是,我想将所有部分保留在 /shared 文件夹中(并首先了解为什么它甚至可以工作)。

我花了几个小时在这里寻找解决方案并一遍又一遍地阅读 this。尝试了所有可能的变化。有什么想法吗?

您尝试呈现的似乎是一个集合,但您将其视为单个对象,尝试遍历它们并呈现每个项目。

顺便说一下,使用 REPL 暂停程序的执行并检查变量可能会极大地帮助您调试此类问题。

您甚至可以检查全局变量和局部变量 运行 您的自定义代码并查看结果。

Pry 是事实上的标准 atm。

试试下面的代码。

<%= render partial: 'shared/comment', collection: @post.comments, as: :comment %>