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