Ruby on rails Rails-事件中的NoMethodError#显示未定义的方法`>';零级:零级

Ruby on rails Rails-事件中的NoMethodError#显示未定义的方法`>';零级:零级,ruby-on-rails,ruby,ruby-on-rails-4,model-view-controller,Ruby On Rails,Ruby,Ruby On Rails 4,Model View Controller,我正在Rails中构建一个事件应用程序,并得到这个错误,这似乎有点奇怪 它与展示页面底部的评论部分有关。我只是想把我的评论表格移到这一部分的顶部,并将所有最近的评论都放在表格下面。这是显示页面的我的查看代码,导致上面的错误代码- <div id="comments"> <h3>Add a comment:</h3> <%= render "com

我正在Rails中构建一个事件应用程序,并得到这个错误,这似乎有点奇怪

它与展示页面底部的评论部分有关。我只是想把我的评论表格移到这一部分的顶部,并将所有最近的评论都放在表格下面。这是显示页面的我的查看代码,导致上面的错误代码-

 <div id="comments">

                        <h3>Add a comment:</h3>
                            <%= render "comments/form" %>   
                            <h2><%= @event.comments.count %></h2>
                            <%= render @event.comments %>       
                </div>

添加评论:
我之所以说这很奇怪,是因为当我像这样呈现代码时(因此注释都显示在注释表单的上方)——


添加评论:
我没有得到错误代码。为什么会这样

这是my comments.html中的代码-

 <div class="comment clearfix">
<div class="comment_content">
    <p class="comment_name"><strong><%= comment.name %></strong></p>
    <p class="comment_body"><%= comment.body %></p>
    <p class="comment_time"><%= time_ago_in_words(comment.created_at) %> Ago</p>
</div>

<% if user_signed_in? %>
<p><%= link_to 'Delete', [comment.event, comment],
                              method: :delete,
                              class: "button",
                                data: { confirm: 'Are you sure?' } %></p>
<% end %>

以前


该错误涉及我的事件显示操作-我的显示操作中没有任何方法

首先确保您有一个嵌套路由来创建注释,并有一个非嵌套路由来销毁注释:

resources :events do
  resources :comments, shallow: true, only: [:create, :destroy]
end
这称为浅嵌套,因为它允许您直接路由到成员操作(显示、编辑、更新、销毁)的资源,在这些操作中,可以通过其唯一id直接访问资源

然后设置表单部分:

# comments/_form.html.erb
<%= form_for([commentable, Comment.new ]) do |f| %>

  # ... 
<% end %>
请注意,我们没有在控制器中构建注释实例。我们稍后会在需要时以表格的形式进行

<div id="comments">
   <% if @event.comments.any? %>
     <h2><%= @event.comments.size %></h2>
     <%= render @event.comments %>
   <% else %>
     <h2>There are no comments yet</h2>
   <% end %>
   <%= render 'comments/form', commentable: @event %>
</div>

不,简单地重新排列呈现调用不应该使错误出现(或消失)。还有别的事情在进行。那么这和表演有关吗?我在事件和注释之间有关联,所以我需要在事件控制器中使用方法吗?您的“注释/表单”是否有可能通过执行@event.comments.build之类的操作来实例化新注释?如果是,您正在向“render@event.comments”集合尝试显示的集合添加新注释。。。由于新的评论没有被持久化,它是在nilSo创建的,这需要放在show动作中?因为你希望最后一条评论先出现,你是否在某处检查是否创建了?所有记录,即使是NIL,通常都应该创建_。您是否检查了模型或控制器中的某些内容?我理解所有这些逻辑——以及它的要求——但是,它并没有解决最初的错误。我仍然需要呈现我的评论表单,使其位于所做的评论之上,当我尝试修改视图时,我再次遇到错误。尝试使用([commentable,Comment.new])的
表单,而不是
commentable.comments.new
。它应该可以工作,因为您实际上并没有将评论添加到集合中。谢谢。我是否需要为页面上未显示的“删除”按钮添加路线?如果您按照我的建议更改了路线,那么您应该已经有了删除路线-
delete/comments/:id
。运行
bin/rake routes
查看您的路线。如果按钮未显示,则是因为您未将注释与用户关联。请参阅我的编辑。
def show
  @event = Event.eager_load(:comments).find(params[:id])
end
<div id="comments">
   <% if @event.comments.any? %>
     <h2><%= @event.comments.size %></h2>
     <%= render @event.comments %>
   <% else %>
     <h2>There are no comments yet</h2>
   <% end %>
   <%= render 'comments/form', commentable: @event %>
</div>
class Comment < ApplicationRecord
  belongs_to :user
end

class User < ApplicationRecord
  has_many :comments
end
<div class="comment clearfix">
  <div class="comment_content">
    <p class="comment_name"><strong><%= comment.name %></strong></p>
    <p class="comment_body"><%= comment.body %></p>
    <p class="comment_time"><%= time_ago_in_words(comment.created_at) %> Ago</p>
  </div>

  <% if user_signed_in? && comment.user == current_user %>
    <% button_to 'Delete', comment, 
       method: :delete, 
       class: "button", 
       data: { confirm: 'Are you sure?' } 
    %>
  <% end %>
</div>
def create
  @event = Event.find(params[:event_id])
  @comment = @event.comments.new(event_params) do |c|
    c.user = current_user
  end
  # ...
end