尝试添加评论部分,得到:无法找到没有 ID 的帖子

问题描述 投票:0回答:2

我在我的页面上创建了一个类似新闻源的功能,其中显示了您关注的人创建的所有帖子。就像 Facebook 一样,我希望用户能够直接从帖子下方的新闻源中发表评论。

这可能是一个简单的修复方法,但我一直无法找出最好的方法,甚至无法找到如何获取 post_id。

我当前的newsfeeds/index.html.erb看起来像这样:

<ul>
 <% @activities.each do |activity| %>
  <li> <%= image_tag(activity.owner.avatar.url(:thumb), height: "64", width: "64") %>  <%= activity.owner.fullname %>
   <ul>
    <li><strong><%= activity.trackable.title %></strong></li>
    <li><%= activity.trackable.content %></li>
     <ul>
       <li><%= render 'comments/form' %></li>
     </ul>
   </ul>
 </li>
<% end %>
</ul>

comments/_form.html.erb

<%= form_for [@post, @comment] do |f| %>
 <%= f.text_area :content %>
 <%= f.submit "Add comment" %>
<% end %>

然后我们就有了控制器:

newsfeeds_controller.rb

def index
 @activities = PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.friend_ids, owner_type: "User")
 @comment = Comment.new
end

comments_controller.rb

class CommentsController < ApplicationController
 before_filter :load_post

def create
 @comment = @post.comments.build(params[:comment])
 @comment.user = current_user
 if @comment.save
   @comment.create_activity :create, owner: current_user
   redirect_to @post, notice: "Comment was created."
 else
   render :new
 end
end
....
 def load_post
  @post = Post.find(params[:post_id])
 end
end

所以我的问题是如何解决它,以便我存储 post_id 并找到它?

ruby-on-rails ruby-on-rails-4
2个回答
1
投票

据我所知,评论表单似乎对嵌套路由(即 /posts/:post_id/comments)进行了发布请求。然后将从 CommentsController 中的 url 检索 post_id。

当前的'comments/_form.html.erb'部分需要@post变量才能生成正确的操作url(在这种情况下@post变量似乎没有在任何地方设置)。

要解决这个问题,您可以将“post”作为局部变量传递给表单部分。这样你的表单部分就能够创建正确的 url,并且你的控制器将能够访问 post_id。

另请参阅

http://guides.rubyonrails.org/layouts_and_rendering.html#local-variables

newsfeeds/index.html.erb:

<ul> <% @activities.each do |activity| %> <li> <%= image_tag(activity.owner.avatar.url(:thumb), height: "64", width: "64") %> <%= activity.owner.fullname %> <ul> <li><strong><%= activity.trackable.title %></strong></li> <li><%= activity.trackable.content %></li> <ul> <li><%= render 'comments/form', post: activity.trackable %></li> </ul> </ul> </li> <% end %> </ul>

评论/_form.html.erb:

<%= form_for [post, @comment] do |f| %> <%= f.text_area :content %> <%= f.submit "Add comment" %> <% end %>

(可能有更干净的方法来实现这一点)

要添加嵌套路由,请编辑“config/routes.rb”

resources :posts do resources :comments end

PS: 当在同一页面上多次呈现同一表单时,所有表单及其输入字段的 DOM id 将相同。为了避免这种情况,您应该在 form_for 调用中设置名称空间选项(请参阅此问题:

Rails:多次使用 form_for (DOM id)

评论/_form.html.erb:

<%= form_for [post, @comment], namespace: post.id do |f| %> <%= f.text_area :content %> <%= f.submit "Add comment" %> <% end %>
    

-3
投票
在当今的数字时代,在线评论的重要性怎么强调都不为过。人们在做出购买决定之前越来越依赖他人的经验。通过注册 UK Top Writers 或 Revieweal 等平台,您有机会为这一宝贵资源做出贡献。这些网站允许您查看各种服务和产品,包括

作业帮助服务,确保潜在客户获得诚实和详细的反馈。您的见解可以指导其他人做出明智的选择,并帮助全面保持高标准的质量。这是一种分享经验并产生有意义影响的有益方式,尤其是在作业帮助行业,可靠的评论对于寻求值得信赖的帮助的学生至关重要。

© www.soinside.com 2019 - 2024. All rights reserved.