Ruby On Rails - NoMethodError

时间:2015-11-01 17:46:04

标签: ruby-on-rails ruby ruby-on-rails-3 nomethoderror

Hy人......我正在学习Ruby on Rail,但我不知道这个页面上发生了什么,这是我的错误:

  

联系人#new中的NoMethodError   显示/home/ubuntu/workspace/simplecodecasts_saas/app/views/contacts/new.html.erb第7行引发:   未定义的方法`name'对于#

这是我的new.html.erb

<div class="row">
  <div class="col-md-4 col-md-offset-4">
    <div class="well">
      <%= form_for @contact do |f| %>
        <div class="form-group">
          <%= f.label :name %>
          <%= f.text_field :name, class: 'form-control' %>
        </div>
        <div class="form-group">
          <%= f.label :email %>
          <%= f.email_field :email, class: 'form-control' %>
        </div>
        <div class="form-group">
          <%= f.label :comments %>
          <%= f.text_area :comments, class: 'form-control' %>
        </div>
        <%= f.submit 'Submit', class: 'btn btn-default' %>
      <% end %>
    </div>
  </div>
</div>

这是我的路线

Rails.application.routes.draw do
  resources :contacts
  get '/about' => 'pages#about'
  root 'pages#home'

和我的contacts_controller.rb

class ContactsController < ApplicationController

  def new
    @contact = Contact.new
  end

  def create
  end

end
出了什么问题?

完整错误屏幕 screen

2 个答案:

答案 0 :(得分:1)

根据您的错误图片,联系人中没有#< contacts id: nil> 字段,请重新运行迁移或添加这些字段。

{{1}}

表示联系人只有id,所以我猜你做的是在运行这个不会调用数据库的迁移后添加这些字段!

请为这些字段重新创建迁移并将其从原始文件中删除,所有这些都应该没问题。

运行后不要向迁移文件中添加内容,这可能会导致从头开始部署此应用程序时出现大问题。

答案 1 :(得分:0)

这意味着您的contact记录没有任何name属性,原因是您的数据库中没有该属性。

要修复它,只需运行rake db:migrate ...或者如果尚未创建迁移,则应执行以下步骤:

$ rails g migration AddAttrsToContacts

#db/migrate/add_attrs_to_contacts____.rb
class AddAttrsToContacts < ActiveRecord::Migration
   def change
       add_column :contacts, :name, :string
       add_column :contacts, :email, :string
       add_column :contacts, :comments, :text
   end
end

$ rake db:migrate

这将使用适当的列填充表,并应解决错误。