【问题标题】:Rails - How to pass a local variable to partial in a shared folder?Rails - 如何将局部变量传递给共享文件夹中的部分?
【发布时间】:2015-08-01 13:00:32
【问题描述】:

我正在尝试让 cmets 出现在博客文章中。评论与帖子相关联。但我不知道如何将@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

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

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

【问题讨论】:

    标签: ruby-on-rails partials


    【解决方案1】:

    试试下面的代码。

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

    【讨论】:

    • 谢谢!我想这是因为我正在尝试渲染一个集合,而不仅仅是一个变量。
    【解决方案2】:

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

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

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

    Pry 是事实上的标准 atm。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多