【问题标题】:Ruby On Rails - NoMethodErrorRuby On Rails - NoMethodError
【发布时间】:2015-11-01 17:46:03
【问题描述】:

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

联系人中的 NoMethodError#new 显示 /home/ubuntu/workspace/simplecodecasts_saas/app/views/contacts/new.html.erb 其中第 7 行提出: # 的未定义方法“名称”

这是我的 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

【问题讨论】:

  • 这意味着您的Contact 表在数据库中没有name 列。
  • 这是我的联系表
  • 这是我的联系人表类 CreateContacts
  • 你跑rake db:migrate了吗?
  • 你能粘贴完整的错误吗?

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


【解决方案1】:

根据您的错误图片,联系人中没有name 字段,请重新运行迁移或添加这些字段。

#< contacts id: nil>

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

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

永远不要在运行后向迁移文件添加任何内容,这在从头开始部署此应用时可能会导致大问题。

【讨论】:

    【解决方案2】:

    这意味着您的 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多