我创建了一个应用程序,用户可以创建一个主题,其他人可以发布他们对该主题的评论。我现在可以创建一个主题和post.form工作但是当我发表评论时我得到了
NoMethodError in Posts#create
undefined method `each' for nil:NilClass
Extracted source (around line #2):
1:
2: <% for topic in @topics do %>
3: <li><%=link_to topic.title, topic_path(topic) %></li>
4:
5: <%= will_paginate @topics %>
我的帖子控制器是:
class PostsController < ApplicationController
before_filter :signed_in_user, only: [:create, :destroy]
before_filter :correct_user, only: :destroy
def create
@post = current_user.posts.build(params[:post])
if @post.save
flash[:success] = "Konu oluşturuldu!"
redirect_to topic_path(topic)
else
render 'static_pages/home'
end
end
def destroy
@post.destroy
redirect_to root_path
end
private
def correct_user
@post = current_user.posts.find_by_id(params[:id])
redirect_to root_path if @post.nil?
end
end
当我创建帖子时,它会重定向到localhost / posts ...虽然我希望它留在该主题中。我怎样才能正确重定向?
答案 0 :(得分:4)
我认为使用@topics.each do
代替for topic in @topics do
会更好,更简洁。
基本上,在您的创建操作中,您似乎没有为@topics
分配任何值。所以它将是零。没有用于尝试枚举超过nil的已定义方法,这就是为什么ruby开始查看Nil类的method_missing方法。如果没有找到任何处理,则会生成以下异常。
我建议您为@topics