我已经尝试解决此错误三天了。我已经检查了有关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来查询该行。
提前感谢您的帮助!干杯!
答案 0 :(得分:1)
您的错误是
undefined method "comment" for #<Post id: nil, created_at: nil, updated_at: nil>
请注意,挂载的post对象只有三个属性:
在创建迁移并在定义表格应该有&#34;评论&#34;之前运行它时,您似乎搞砸了。列。
您可以重新创建数据库,以便正确执行迁移。
rake db:drop
rake db:create
rake db:migrate
之后,请确保您的文件schema.rb
在posts
列中显示comment
列。