Ruby on rails Rails-事件中的NoMethodError#显示未定义的方法`>';零级:零级
我正在Rails中构建一个事件应用程序,并得到这个错误,这似乎有点奇怪 它与展示页面底部的评论部分有关。我只是想把我的评论表格移到这一部分的顶部,并将所有最近的评论都放在表格下面。这是显示页面的我的查看代码,导致上面的错误代码-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
<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