【问题标题】:CommentsController Fails to Post the CommentCommentsController 无法发表评论
【发布时间】:2014-08-12 00:33:50
【问题描述】:

我正在尝试使用 Ruby on Rails 编写博客,到目前为止,我是在编写评论控制器,我对 Ruby 有点生疏,所以这实际上可能是问题所在(使用旧的编码方式?)。

def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params.permit[:comment])
  @comment.save

  redirect_to(:back)
end

现在,它实际上工作正常,但它根本不会发布评论,它只是说“发布 xyz 分钟前”,但实际写的帖子在发送到网站后并没有显示在页面上.我现在不知道这是数据库问题还是代码失败(即使代码失败;))!

如果你们需要有关我的代码的更多信息,请询问:)!

【问题讨论】:

  • 您的意思是您在 html 页面上看到了一些更改,但它们并未包含您想要的所有信息?然后提供您的view 代码和new 操作代码。
  • 抱歉这个问题:您的意思是查看代码,来自 HMTL 站点的代码,我在哪里可以获得新的操作代码?抱歉,我是 Rails 新手!
  • 您的代码似乎更有可能运行良好,但您的模板没有输出您的评论。您可以通过运行rails console 来测试它,找到您的帖子并查看它有哪些 cmets。例如:p = Post.find(3) 然后p.comments
  • 谢谢亚历克斯,看起来,它实际上注册了 cmets,但仍将实际评论输出为“text: nil”:评论加载(0.2ms)选择“cmets”。* FROM“cmets”WHERE "cmets"."post_id" = ? [["post_id", 3]] => #<:associations::collectionproxy id: post_id: text: nil created_at:>
  • 尝试了一些其他的东西,但仍然看起来像这样:abload.de/img/bildschirmfoto2014-063rk00.png

标签: ruby-on-rails ruby controller comments


【解决方案1】:

您的permit 通话中有错字,应为

params.permit(comment: :text)

这假设您的 Comment 模型将实际评论存储在 body 列中,并且您的 params 看起来像这样:

{ post_id: 42, comment: { text: "..." } }

另外,您应该使用ActiveRecord's validations 并像这样捕获无效的 cmets:

def create
  # ...
  if @comment.save
    redirect_to @post
  else
    render :new
  end
end

【讨论】:

  • 谢谢,非常有帮助,但我的代码实际上可以工作,我把它改成了你的。但问题(如上面亚历克斯列出的)实际上是问题所在。数据库正在注册评论,但将文本设置为零,所以我实际上不知道现在在哪里更改:E!
  • ... 用于不同程度的工作。它可能会注册以创建评论,但它会忽略文本,因为您不允许评论的文本。我已经提供了有关如何执行此操作的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多