我对 Ruby on Rails 有点陌生(并且已经很喜欢它了),并尝试制作一个非常简单的 web 应用程序,该应用程序在一个页面上列出带有提交表单和“提要”的帖子。我从 Michael Hartl 的精彩 Rails 教程中获得了很多这些编程概念。
发布工作正常;当提交没有表单数据的表单时抛出错误(以测试错误处理)。
很抱歉这个新手问题,但我真的很努力学习,非常感谢您的帮助。
我一遍又一遍地搜索这些异常,我似乎无法追踪它。我认为问题在于@posts = Post.all
在线,我认为它正在拉动未保存的空帖子,但这是我能得出的唯一结论,而且解决它的方法对我来说并不明显。
如果您需要更多代码,我很乐意发布它,非常感谢您的帮助!
这是引发错误的违规代码:
/app/controllers/posts_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
/app/models/post.rb
class Post < ActiveRecord::Base
attr_accessible :author, :location, :text
validates :author, presence: true
validates :text, presence: true, length: {maximum: 140}
end
index.html.erb(我在这里截断了一些不相关的代码)
<div class="span8 center">
<%= render partial: "shared/flash_messages", flash: flash %>
<%= render 'shared/post_form' %>
<h4>Latest posts <span class="label label-info">Updated LIVE</span></h4>
<ol class="posts">
<% @posts.sort_by{|t| - t.created_at.to_i}.each do |post|%>
<li>
<span class="content"> <%= post.text %> </span>
<span class="content muted">Posted <%= time_ago_in_words(post.created_at) %> ago by <%= post.author %> in <%= post.location %>. </span>
</li>
<% end %>
/config/routes.rb
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>