为什么我会收到此错误(NoMethodError)

时间:2017-08-21 15:25:07

标签: ruby-on-rails ruby ruby-on-rails-4 nomethoderror cloud9

我在rails cloud 9代码上遇到ruby问题,而我的任务是从UI创建一篇文章,并在我点击提交时将其保存到数据库中。

这是我的问题形象:

enter image description here

这是我的云9代码

routes.rb中:

Rails.application.routes.draw do
  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".

  # You can have the root of your site routed with "root"
  # root 'welcome#index'
  resources :articles

  root 'pages#home'
  get 'about', to: 'pages#about'
end

文章控制器(articles_controller.rb):

class ArticlesController < ApplicationController
  def new
    @article = Article.new 
  end
end 

视图中的文章文件夹中的new.html.erb:

<h1>Create an article</h1>

<%= form_for @article do |f| %>

    <p>
        <%= f.label :title %>
        <%= f.text_area :title %>
    </p>

<% end %>

文章模型(article.rb):

class Article < ActiveRecord::Base

end

我已完成迁移,这是我的迁移文件:

class CreateArticles < ActiveRecord::Migration
  def change
    @article = Article.new

    create_table :articles do |t|
      t.string :title
    end
  end
end

2 个答案:

答案 0 :(得分:3)

您的迁移似乎缺少title

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :title
    end
  end
end

此外,您的模型应继承自ApplicationRecord

class Article < ApplicationRecord
end

如果你的Rails版本小于5,则ActiveRecord::Base

class Article < ActiveRecord::Base
end

答案 1 :(得分:0)

您应该从迁移文件中删除行@article = Article.new

这将使用new关键字创建一个文章实例,同时您将运行迁移,它将是一个零实例,这就是您遇到上述错误的原因

  

文章ID:nill

因为最后一条记录是零,你正在寻找该记录的标题主键也是零。