我是铁杆菜鸟。我的联系表格有问题。
我有一个错误:undefined method 'name' for nil:NilClass
<p>
<strong>Name:</strong>
<%= @contact_forms.name %>
</p>
我的manager.html.erb是:
<div>
<p>
<strong>Name:</strong>
<%= @contact_forms.name %>
</p>
<p>
<strong>Text:</strong>
<%= @contact_forms.text %>
</p>
</div>
我的contact_form_controller.rb是:
class ContactFormController < ApplicationController
def new
end
def create
@contact_forms = Contact_form.new(params[:contact_form])
@contact_forms.save
redirect_to root_path
end
def show
@contact_forms = Contact_form.all
end
end
我的迁移文件:
class CreateContactForms < ActiveRecord::Migration
def change
create_table :contact_forms do |t|
t.string :name
t.string :phone
t.string :email
t.text :text
t.timestamps null: false
end
end
end
我的static_pages_controller.rb是
class StaticPagesController < ApplicationController
def home
end
def manager
end
end
由于
答案 0 :(得分:1)
未定义的方法`name&#39;为零:NilClass
您没有在@contact_forms
控制器的manager
方法中定义static_pages
,错误也是如此。如下定义它可以解决您的问题。
class StaticPagesController < ApplicationController
def home
end
def manager
@contact_forms = ContactForm.all
end
end
<强> 更新 强>
您还应该在@contact_forms
manager.html.erb
,如下所示
<div>
<% @contact_forms.each do |contact_form| %>
<p>
<strong>Name:</strong>
<%= contact_form.name %>
</p>
<p>
<strong>Text:</strong>
<%= contact_form.text %>
</p>
<% end %>
</div>
答案 1 :(得分:1)
我是铁路菜鸟
欢迎来到这个家庭! You're a newb, not noob:)
帕万的回答是正确的;既然你是新人,我想给你一些背景信息:nil的未定义方法'name':NilClass
此错误表示您尝试在尚未定义/填充的变量上调用方法。
在您的情况下, @contact_forms
未定义。
许多新Ruby开发人员的困惑之处在于,Ruby不会停止整个程序,而是填充NilClass
&amp;声称它有错误
因此,虽然您希望它声明该变量未声明,但它会向您提供有关方法如何不起作用的消息。
-
要解决您的问题,您需要使用以下内容:
#config/routes.rb
resources :contact_forms
resources :static_pages
#app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
def manager
@contact_forms = ContactForm.all
end
end
要从Pavan窃取,必须通过循环@contact_forms
变量来备份(除非您使用ContactForm
模型的单个实例填充它):
#app/views/static_pages/manager.html.erb
<% @contact_forms.each do |form| %>
<%= form.name %>
<% end %>
顺便说一句,我从不建议调用控制器StaticPages
。
当您了解Ruby时,您会发现该语言的面向对象性质:
我解释了很多;基本上,这意味着你必须让你的程序以对象为中心,在Rails的情况下,由Models
填充。
因此,您需要考虑在显示此视图时您尝试操作的数据对象。目前,您似乎想要显示contact
表单 - 我会在ApplicationController
中将其置于自己的方法中:
#config/routes.rb
match "contact", to: "application#contact_form", via: [:get, :post]
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
def contact_form
if request.post?
#post contact form
else
#load contact form
end
end
end