我创建了一个应用程序,用户可以在其中创建项目并对这些项目进行评论。现在,我有能力让用户在每个项目页面上发表评论。
问题1:订单目前正在显示评论,然后是在此下方提交新评论的选项。当我尝试重新排列它以便它显示在评论列表之前提交注释我得到NoMethodError:未定义的方法`name'为nil:NilClass。我需要做什么才能使评论提交框位于当前评论之上。
问题2:目前,评论最近列在最底层。如何翻转订单,以便最近才能获得最新消息?
comment.rb
class Comment < ActiveRecord::Base
attr_accessible :content, :project_id, :user_id
validates :content, presence: true
belongs_to :project
belongs_to :user
scope :newest, order("created_at desc")
end
comments_controller.rb
class CommentsController < ApplicationController
before_filter :authenticate_user!
def create
project = Project.find(params[:project_id])
@comment = project.comments.create!(params[:comment])
redirect_to project_path(project)
end
end
项目/ show.html.erb
<!-- Show Comments -->
<p class="comment_header">Comments:</p>
<% if @project.comments.blank? %>
<p>No comments made yet for this project.</p>
<% else %>
<% @project.comments.each do |comment| %>
<div class="comments">
<p><%= comment.content %></p>
<span>By <%= link_to comment.user.name, comment.user %> <%= time_ago_in_words(comment.created_at) %> ago</span>
</div>
<% end %>
<% end %>
<!-- Add Comments -->
<% if signed_in? %>
<p class="comment_header">Add Comment:</p>
<span class="comment">
<%= form_for([@project, @project.comments.build]) do |f| %>
<div class="field">
<%= f.text_area :content, :class => "span7", :rows => "3" %>
</div>
<%= f.hidden_field :user_id, :value => current_user.id %>
<div class="actions">
<%= f.submit "Add Comment", :class => "btn btn-header" %>
</div>
<% end %>
</span>
<% else %>
<p class="comment_header"><%= link_to 'Sign in', new_user_session_path %> to post comments.</p>
<% end %>
<!-- end of comments section -->
答案 0 :(得分:2)
1)这不需要特别的东西。我认为你刚刚在标记中出错(... html.erb)。确保你采用整个form_for / end部分,不要将f / text_area移到其外部。
2)以相反的顺序排序(最后一条评论)。在评论模型中的created_at日期对DESC进行排序。
comment.rb
scope :newest, order("created_at desc")
show.html.erb(已修复以显示此内容)
<% @project.comments.newest.each do |comment| %>