【问题标题】:Unable To Displaying Comments On A Post无法在帖子上显示评论
【发布时间】:2019-12-07 17:11:30
【问题描述】:

我正在将 cmets 添加到可以保存的帖子中,但我一直在努力让它们在帖子上显示多个 cmets。当我保存它时,它只显示发布的第一条评论。

评论控制器:

class CommentsController < ApplicationController

  def create
    @micropost = Micropost.find_by(id: params[:micropost_id])
    @comment = 
@micropost.comments.create(params[:comment].permit(:body))
    if @comment.save
      flash[:success] = "Comment Posted"
    end
    redirect_to current_user
  end

end

def show
  @comment = Comment.find_by(id: params[:id])
end

结束

在我看来:

  <%= @comments.body %>

我可以显示一个评论,但是当我写另一个评论时,第一个只会显示。我尝试使用 do 循环在视图中循环它们,但随后我收到一条错误消息,指出 undefined method .each for "text from comment":String

也许我的节目@comment 需要改进,或者我必须在视图中做些什么才能让它们全部显示。相同的 do 循环适用于帖子,但我似乎可以让它适用于 cmets。

当没有保存 cmets 时,我还有另一个小问题,我根本无法查看帖子,因为没有正文存在。我想我必须写一些 if/else 来说明如果没有正文,无论如何都要显示。

【问题讨论】:

  • 您在哪里展示您的 cmets?在帖子详细信息页面中?
  • 尝试循环视图中的 cmets 时遇到的错误是因为 .each 在字符串上不可用,而仅在数组和哈希上可用。如果您正在执行@comments.body.each,那将不起作用,因为我假设正文是一个字符串。你可以试试@comments.each。但我不确定@comments 是在哪里定义的,是不是应该是@commment?
  • @KrupaSuthar 我在展后页面上显示 cmets。
  • @codeinaire 对循环字符串很有意义。抱歉,应该是视图中的@comment。我是否需要将所有字符串(即 cmets)转换为数组,然后对其进行迭代?

标签: ruby-on-rails ruby comments


【解决方案1】:

在您的帖子控制器的 show 方法中,您应该获取 cmets,然后您可以在 html 页面中显示它。

例如,

def show
 @post = Post.includes(:comments).find(params[:id])
end

在您的视图文件中,您可以像下面那样遍历 cmets,

@post.comments.each do |comment|
# you logic here
end

【讨论】:

  • 玩了一会儿,但这个几乎让我到了那里。它将它们全部显示在一起,但我必须想办法将它们分开。非常感谢。
【解决方案2】:

您正在做的是获取单个评论并尝试遍历该对象,这是不可能的。

您要做的是显示发布在“Micropost”上的所有 cmets,因此您只需在参数和用户中传递 micropost_id 即可,如下所示

@comments = Comment.where(micropost_id: params[:micropost_id])  

然后您可以在 .erb 模板中循环遍历该对象

<% @comments.each do|comment| %>
  <%= comment.body %>
<% end %>

【讨论】:

  • 我觉得这个非常接近。我已经尝试过了,它节省了我可以显示帖子,但没有显示 cmets。使用 cmets 获取页面时,控制台显示以下内容。 ` 评论加载 (0.4ms) SELECT "cmets".* FROM "cmets" WHERE "cmets"."micropost_id" IS NULL 渲染 cmets/_cmets.html.erb (1.5ms) 渲染 microposts/show.html.erb 在 layouts/ application (16.5ms) Rendered layouts/_header.html.erb (1.6ms) Completed 200 OK in 93ms (Views: 88.3ms | ActiveRecord: 1.2ms)`
  • 由于某种原因,micropost_id 显示为 null。
  • 如果我查看 cmets 表,则存在 micropost_id #&lt;ActiveRecord::Relation [#&lt;Comment id: 1, body: "Testing this comment section out baby", created_at: "2019-07-30 11:22:07", updated_at: "2019-07-30 11:22:07", micropost_id: 1&gt;
  • 如果我将@comments = Comment.find_by(id: params[:id]) 添加为我的控制器并将&lt;%= @comment.body %&gt; 添加到我的视图中,它将显示一条评论。但是,如果我尝试循环它,它就不起作用,因为它是字符串。所以我快到了。我只需要以某种方式获取它们,以便我可以遍历它们。
  • 你应该调试你得到的参数,params[:micropost_id],如果没有,那么你应该首先尝试解决这个问题,如果你不能得到那个 micropost_id,你只能获取 params[:id],即评论 id ,那么你应该编写像 @cmets = Comment.where(micropost_id: Comment.find(params[:id]).micropost_id) 这样的混乱查询,但我建议你不要遵循这个方法,相反,您应该尝试从 params 获取 micropost_id。
猜你喜欢
  • 2019-08-24
  • 1970-01-01
  • 2017-02-11
  • 2018-10-21
  • 2015-05-24
  • 2022-01-10
  • 2021-05-14
  • 1970-01-01
  • 2021-11-02
相关资源
最近更新 更多