Ruby 在 Rails - NoMethodError
Ruby On Rails - NoMethodError
大家好...我正在学习 Ruby on Rail,但我不知道这个页面上发生了什么,这是我的错误:
NoMethodError in Contacts#new
Showing /home/ubuntu/workspace/simplecodecasts_saas/app/views/contacts/new.html.erb where line #7 raised:
undefined method `name' for #
这是我的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
根据您的错误图像,联系人中没有 name
字段,请重新运行 迁移或添加这些字段。
#< contacts id: nil>
意味着联系人只有 ID,所以我猜你所做的是在 运行 此迁移之后添加这些字段,这不会调用数据库!
请为这些字段重新创建迁移并将它们从原始文件中删除,一切都应该没问题。
在你 运行 之后永远不要向迁移文件中添加东西,这在从头开始部署此应用程序时可能会导致大问题。
这意味着您的 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
这将用适当的列填充 table,应该可以解决错误。
大家好...我正在学习 Ruby on Rail,但我不知道这个页面上发生了什么,这是我的错误:
NoMethodError in Contacts#new Showing /home/ubuntu/workspace/simplecodecasts_saas/app/views/contacts/new.html.erb where line #7 raised: undefined method `name' for #
这是我的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
根据您的错误图像,联系人中没有 name
字段,请重新运行 迁移或添加这些字段。
#< contacts id: nil>
意味着联系人只有 ID,所以我猜你所做的是在 运行 此迁移之后添加这些字段,这不会调用数据库!
请为这些字段重新创建迁移并将它们从原始文件中删除,一切都应该没问题。
在你 运行 之后永远不要向迁移文件中添加东西,这在从头开始部署此应用程序时可能会导致大问题。
这意味着您的 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
这将用适当的列填充 table,应该可以解决错误。