Ruby on rails Rails异常:尝试处理错误时,操作控制器按nil:NilClass排序

Ruby on rails Rails异常:尝试处理错误时,操作控制器按nil:NilClass排序,ruby-on-rails,Ruby On Rails,我对RubyonRails有点陌生(并且已经很喜欢它了),我试图制作一个非常简单的webapp,在一个页面上列出带有提交表单和“提要”的帖子。我从MichaelHartl精彩的Rails教程中获得了很多这样的编程概念 张贴工程罚款;;在提交没有表单数据的表单时引发错误(以测试错误处理) 很抱歉问你这个新手问题,但我真的很努力学习,非常感谢你的帮助 我一次又一次地搜索这些异常,但我似乎无法跟踪它。我认为问题在于@posts=Post.all行,我认为这是在拉未保存的空帖子,但这是我能得出的唯一结论

我对RubyonRails有点陌生(并且已经很喜欢它了),我试图制作一个非常简单的webapp,在一个页面上列出带有提交表单和“提要”的帖子。我从MichaelHartl精彩的Rails教程中获得了很多这样的编程概念

张贴工程罚款;;在提交没有表单数据的表单时引发错误(以测试错误处理)

很抱歉问你这个新手问题,但我真的很努力学习,非常感谢你的帮助

我一次又一次地搜索这些异常,但我似乎无法跟踪它。我认为问题在于
@posts=Post.all
行,我认为这是在拉未保存的空帖子,但这是我能得出的唯一结论,解决方法对我来说并不明显

如果您需要更多的代码,我很乐意发布,非常感谢您的帮助

以下是引发错误的错误代码:

/app/controllers/posts\u controller.rb

class PostsController < ApplicationController
  def index
    @posts = Post.all
    @post = Post.new
  end

  def create
    @post = Post.new(params[:post])
    if @post.save
      redirect_to '/', :flash => { :success => "Awesomesauce! Your post has been broadcast (like a boss)!" }
    else
      @post.destroy
      render 'index'
    end
  end

  def destroy
    @post = Post.destroy
  end

end
class Post < ActiveRecord::Base
  attr_accessible :author, :location, :text

  validates :author, presence: true
  validates :text, presence: true, length: {maximum: 140}


end
match '/', to: 'posts#index'
  resources :posts
引发的错误如下所示:

undefined method `sort_by' for nil:NilClass
Extracted source (around line #14):

11:         <%= render 'shared/post_form' %>
12:         <h4>Latest posts <span class="label label-info">Updated LIVE</span></h4>
13:         <ol class="posts">
14:             <% @posts.sort_by{|t| - t.created_at.to_i}.each do |post|%>
15:             <li>
16:                 <span class="content"> <%= post.text %> </span>
17:                 <span class="content muted">Posted <%= time_ago_in_words(post.created_at) %> ago by <%= post.author %> in <%= post.location %>. </span>
nil:NilClass的未定义方法“sort_by” 提取的源(第14行附近): 11: 12:最新帖子实时更新 13: 14: 15:
  • 16: 17:前由in发布。
    调用
    呈现“索引”
    不会在
    #index
    操作中运行代码。它只渲染模板。因此,当您的帖子创建失败并呈现索引时,
    @posts
    是未定义的。

    创建
    条件中,您应该指定要呈现的操作:

    render :action => :index
    
    这将提示ActionController完全重新呈现
    索引
    操作,同时将某些元素(包括验证错误消息)保留在内存中,以便视图可以使用这些元素

    您当前的代码失败,因为
    render'index'
    呈现
    app/views/posts/index.html.erb
    模板,而不是
    index
    操作。由于您尚未在
    创建
    操作中实例化
    @posts
    实例变量,因此该变量对模板不可用,因此在尝试迭代
    @posts
    时会出现
    nil:NilClass
    错误


    渲染<代码>索引>代码>动作,而不是模板,解决所有这些问题。

    您可以考虑将<代码>重定向到“/\”/代码>和<代码>渲染“索引”<代码> >代码>重定向到RoToTyPosith<代码>或<代码>重定向到PassSyPosith<代码>。这样,您就可以在它们的主页config/routes.rb中管理您的路由,而这些路由不是硬编码的

    我试图用我的代码替换你的代码,但它仍然在第14行抛出相同的错误。我也尝试过,用
    render:action=>:index
    替换
    redirect_到“/”
    ,甚至一篇有效的帖子也会抛出同样的错误。关于如何解决这个问题还有其他想法吗?还应该注意,我正在运行Rails 3.2.12和Ruby 1.9.3-HEAD(cron每晚从自制软件中更新)。尝试将
    @posts=Post.all
    添加到
    创建
    操作中,就在
    @Post=Post.new(params[:Post])
    的正下方。这很完美,例外情况已经停止。谢谢你的帮助,我真的很感激!谢谢你指出这一点;我忘了那是正确的做法。我已经修复了
    routes.rb,现在好多了。谢谢你的帮助。
    
    render :action => :index