我如何发表评论并与帖子'索引页面中的帖子相关联?
这是我的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保存评论 我该如何解决?
另一个: 在将注释保存到注释的索引页面后,如何将页面重定向到索引页面?
答案 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)
在这种情况下......这是您可以获得帮助的最佳示例