Codecademy Rails教程中的NoMethodError线程

时间:2016-05-08 23:22:33

标签: ruby-on-rails

我已经尝试解决此错误三天了。我已经检查了有关NoMethod错误的其他几个问题。它们通常通过修复一个变量的拼写来匹配另一个变量来解决。所以我认为我还不熟悉各种文件与确定哪个变量与其对应物不匹配的方式。

应用程序/控制器/ posts_controller.rb

class PostsController < ApplicationController
  def index 
    @new_post = Post.new 
    @all_posts = Post.order(created_at: :desc).all 
  end
end

配置/ routes.rb中

Rails.application.routes.draw do
  resources :posts
  root 'posts#index'
end

应用程序/视图/帖/ index.html.erb

<div class="header">
  <div class="container">
    <h1>threadly</h1>
  </div>
</div>

<div class="main">
  <div class="container">

    <!-- Form goes here -->
    <%= form_for(@new_post) do |f| %>  
      <div class="field"> 
        <%= f.label :comment %><br>
        <%= f.text_area :comment %>  
      </div> 
      <div class="actions"> 
        <%= f.submit "Create" %> 
      </div> 
    <% end %>

    <ul class="comments"> 
      <% @all_posts.each do |p| %> 
      <li><%= p.comment %></li>
      <% end %> 
    </ul>
  </div>
</div>

db / migrate /((迁移文件))

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.text :comment
      t.timestamps
    end
  end
end

以下是错误消息的文本:

NoMethodError in Posts#index

Showing /home/ccuser/workspace/learn-rails_threadly/threadly/app/views/posts/index.html.erb where line #14 raised:

undefined method `comment' for #<Post id: nil, created_at: nil, updated_at: nil>

然后它显示来自html文件的提取源,突出显示以下行:

<%= f.text_area :comment %>

其次是:

Rails.root: /home/ccuser/workspace/learn-rails_threadly/threadly

Application Trace | Framework Trace | Full Trace
app/views/posts/index.html.erb:14:in `block in _app_views_posts_index_html_erb___3939597186725497532_34806000'
app/views/posts/index.html.erb:11:in `_app_views_posts_index_html_erb___3939597186725497532_34806000'

我还尝试了f.text和f.text_field来查询该行。

提前感谢您的帮助!干杯!

1 个答案:

答案 0 :(得分:1)

您的错误是

undefined method "comment" for #<Post id: nil, created_at: nil, updated_at: nil>

请注意,挂载的post对象只有三个属性:

  • ID
  • created_at
  • 的updated_at

在创建迁移并在定义表格应该有&#34;评论&#34;之前运行它时,您似乎搞砸了。列。

您可以重新创建数据库,以便正确执行迁移。

  • rake db:drop
  • rake db:create
  • rake db:migrate

之后,请确保您的文件schema.rbposts列中显示comment列。