我试图关注Ryan Bates Polymorphic association教程,以便为我的网站添加一些评论。
问题是我有嵌套资源:
#Nesting Resources
resources :users do
resources :photos do
resources :comments
resources :tags
end
end
所以我在视图中收到错误(照片/节目)
undefined method `each' for nil:NilClass
我认为问题出在我的控制器中,注释没有正确定义,但由于我有嵌套资源,我不知道该怎么做。
def show
@photo = Photo.friendly.find(params[:id])
@user = @photo.user
@commentable = @photo
@comments = @commentable.comments
@comment = Comment.new
end
<h2>Comments</h2>
<% if @comments.any? %>
<%= render "comments/comments" %>
<% else %>
Todavía no hay comentarios
<% if user_signed_in? %>
<%= render "comments/form" %>
<% end %>
<% end %>
<%= form_for [@commentable, @comment] do |f| %>
<% if @comment.errors.any? %>
<div class="error_messages">
<h2>Please correct the following errors.</h2>
<ul>
<% @comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.text_area :content, rows: 8 %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<div id="comments">
<% @comments.each do |comment| %>
<div class="comment">
<%= simple_format comment.content %>
</div>
<% end %>
</div>
答案 0 :(得分:1)
您的错误是undefined method each for nil:NilClass
。你可以猜测你是在一个零对象上调用每个。这里你的@comments
是零,因此给你带来了麻烦。
在你看来尝试这样的事情:
<div id="comments">
<% if @comments %>
<% @comments.each do |comment| %>
<div class="comment">
<%= simple_format comment.content %>
</div>
<% end %>
<% end %>
</div>
编辑:
因此,如果您查看代码,那么 @comments 直到:
<% if @comments.any? %>
<%= render "comments/comments" %>
<% else %>
#do stuff
<% end %>
在你打电话给你的部分后,你的@comment丢失所以试试这个:
<% if @comments.any? %>
<%= render "comments/comments", comments: @comment %>
<% else %>
#do stuff
<% end %>
然后在您的视图中使用
<div id="comments">
<% comments.each do |comment| %>
<div class="comment">
<%= simple_format comment.content %>
</div>
<% end %>
</div>