如何发表评论并与帖子'索引页面中的帖子相关联?

时间:2014-08-13 02:01:15

标签: ruby-on-rails ruby ruby-on-rails-4

我如何发表评论并与帖子'索引页面中的帖子相关联?

这是我的PostsController:

def index
  @posts = Post.all
  "what should I add here?"
end

# GET /posts/1
# GET /posts/1.json
def show
  @comments = @post.comments.all
  @comment = @post.comments.build
end

及其帖子显示视图:

<p id="notice"><%= notice %></p>

<p>
  <h3><%= @post.name %></h3>
</p>

<p>
  <%= (@post.descriptopm).html_safe %>
</p>

<%= link_to 'Edit', edit_post_path(@post), :class => "btn btn-info btn-xs" %>
<%= link_to 'Back', posts_path, :class => "btn btn-info btn-xs" %>

<h3>Comments</h3>
<% @comments.each do |comment| %>
  <div>
    <strong><%= comment.user_name %></strong>
    <br />
    <p><%= (comment.body).html_safe %></p>
  </div>
<% end %>
<%= render 'comments/form' %>

及其帖子索引视图:

<h1>Listing posts</h1>
<%= link_to 'Create a New Post', new_post_path, :class => "btn btn-success btn-sm" %>
<% @posts.each do |post| %>
<div class="post thumbnail">
  <h3><%= post.name %></h3>
  <div><%= (post.descriptopm).html_safe %></div>

  <div class="bottom-bottoms">
    <%= link_to 'Display', post, :class => "btn btn-info btn-xs" %>
    <%= link_to 'Edit', edit_post_path(post), :class => "btn btn-info btn-xs" %>
    <%= link_to 'Delete', post, method: :delete, data: { confirm: 'Are you sure?' }, :class => "btn btn-info btn-xs" %>
  </div>

  <h3>Comments</h3>
  <% post.comments.each do |comment| %>
    <div>
      <strong><%= comment.user_name %></strong>
      <br />
      <p><%= (comment.body).html_safe %></p>
    </div>
  <% end %>
  <%= render 'comments/form' %>

</div>
<% end %>

post.rb:

class Post < ActiveRecord::Base
    has_many :comments
end

comment.rb:

class Comment < ActiveRecord::Base
    belongs_to :post
end

节目页面的评论功能看起来正确 但是当我在帖子的索引页面发表评论时 它可能无法使用正确的帖子ID保存评论 我该如何解决?

另一个: 在将注释保存到注释的索引页面后,如何将页面重定向到索引页面?

3 个答案:

答案 0 :(得分:1)

  

我如何发表评论并与帖子中的帖子相关联?指数   网页?

有几件事需要考虑:


评论对象

首先,您需要了解,因为Rails是一个面向对象的框架(由于构建在Ruby上),您需要确保新的注释与相关的{{1}相对应对象

我认为这是你感到困惑的核心:

Post

你遇到的麻烦就是你无法建立&#34;对def index @posts = Post.all # Here needs to go your "comment" build methodology. Except, it only works *per* post ;) end 的评论 - 您必须按帖子构建帖子,如下所示:

Posts

-

<强>实施

我能给你的最佳解决方案会有所限制,但会正确地满足你的目的。这是:

@post = Post.find 2
@post.comments.new #-> allows you to create a new comment for that particular post

这将考虑到对于#app/controllers/posts_controller.rb Class PostsController < ApplicationController def index @posts = Post.all @comment = Comment.new end end #app/controllers/comments_controller.rb Class CommentsController < ApplicationController def create @comment = Comment.new(comment_params) @comment.save end private def comment_params params.require(:comment).permit(:comment, :params, :post_id) end end 上的每条评论,您都会有一张附有index的表单; 将是&#34;线性&#34;流程(IE您一次只能发布一条评论):

post_id

是的,此为每个#app/views/posts/index.html.erb <% @posts.each do |post| %> <%= post.title %> <%= form_for @comment do |f| %> <%= f.hidden_field :post_id, value: post.id %> <%= f.text_field :title %> <%= f.submit %> <% end %> <% end %> 提供一条&#34;新评论&#34;索引页面上的表格(因此我表示其收缩)。但是,它会做的是让您能够为页面上的任何帖子添加评论,并使用Post

处理它们

答案 1 :(得分:0)

要回答第二个问题,您可以使用

redirect_to post_index_path

关于第一个问题,您可以使用以下方式设置帖子的帖子ID:

@post.comments.new

而不仅仅是Comment.new,它不会设置帖子的ID。

答案 2 :(得分:0)

在这种情况下......这是您可以获得帮助的最佳示例