如何为#<contact id:=“”nil =“”>修复未定义的方法`name'?

时间:2017-01-16 21:44:26

标签: ruby-on-rails

我很想得到帮助,因为我无法找到答案。我收到一条错误消息

undefined method `name' for #<Contact id: nil>

我不知道出了什么问题。

我的查看文件如下所示

<div class="container">

    联系我们

<div class="col-md-4 col-md-offset-4">
  <%= flash[:notice] %>
  <div class="well">
    <%= form_for @contact do |f| %>
      <div class="form-group">
        <%= f.label :name %>
        <%= f.text_field :name, class: 'form-control' %>
      </div>

这不是全部,但问题线似乎是

<%= f.text_field :name, class: 'form-control' %>

即使我没有碰到那条线。

我改变的是

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

<%= form_for "/contacts" do |f| %>

我做错了什么?

编辑: 这是我的contacts_controller

class ContactsController < ApplicationController
  def new
    @contact = Contact.new
  end

  def create
    @contact = Contact.new(contact_params) 
    if @contact.save
      redirect_to new_contact_path, notice: "Message Sent."
    else 
      redirect_to new_contact_path, notice: "Error occured"
    end
  end

  private 
    def contact_params
      params.require(:contact).permit(:name, :email, :comments)
    end
end

编辑2: 我想通了,但我不太清楚为什么会这样。如果有人能向我解释,我会非常感激。我在我的控制台中运行了rails db:resetrails db:droprails db:migrate,这似乎解决了这个问题。我记得我最初打字的时候rails db:migrate我不小心输入了rails db migrate。这可能是问题的原因吗?

1 个答案:

答案 0 :(得分:1)

根据您上次的修改,是rails db migrate可能会导致此问题,因为当您运行它时,您可能没有注意到它失败了,并且没有为name模型创建Contact列虽然您无法访问它,并且如果您正确运行它而不破坏数据库并再次创建它将起作用,因为只有您的上次迁移没有运行,并且作为将来参考知道上次迁移运行的是什么检查schema.rb您将在顶部看到迁移ID,这是迁移名称的第一部分(时间戳)。