我正在通过Daniel Kehoe的关于rails的教程进行工作,并遇到了一个我不明白的问题,并且无法找到在线答案。当使用带参数的flash消息时,我得到了这篇文章标题中描述的NoMethodError。学习Ruby on Rails:NoMethodError(未定义方法`[]'为零:NilClass):
这里是控制器
class ContactsController < ApplicationController
def process_form
Rails.logger.debug "DEBUG: params are #{params.inspect}"
flash[:notice] = "Received request from #{params[:contact][:name]}"
redirect_to root_path
end
end
如果我删除它的工作原理[:联系人],然后将[:名字]。如果我删除[:name]并离开[:contact],它将重定向但不显示名称。如果我在控制器列表中显示了[:contact]和[:name],我会得到NoMethodError,并且它不会重定向。
这是我的看法
页<% content_for :title do %>Contact<% end %>
<h3>Contact</h3>
<div class="form">
<%= form_with(url: contact_path) do |form| %>
<%= form.label :name %>
<%= form.text_field :name, autofocus: true %>
<br/>
<br/>
<%= form.label :email %>
<%= form.email_field :email %>
<br/>
<br/>
<%= form.label 'message' %>
<%= form.text_area :content, size: '40x5' %>
<br/>
<br/>
<%= form.submit 'Submit', class: 'submit' %>
<% end %>
</div>
这里是我的routes.rb
Rails.application.routes.draw do
post 'contact', to: 'contacts#process_form'
root to: 'visitors#new'
end
这是我的日志时,我得到了NoMethodError
:
开始POST“/接触“2017-07-23 23:25:11 +0000通过 处理ContactsController#process_form as JS参数:{”utf8“=>”✓“, “authenticity_token”=>“...”,“name”=>“Jane Doe”, “email”=>“[email protected]”,“content”=>“oiuwroiueroieieroiuerw”, “commit”=“ >“Submit”} DEBUG:params是“✓”,“authenticity_token”=>“...”,“name”=>“Jane Doe”, “email”=>“[email protected]”,“content “=>” oiuwroiueroieroiuerw”, “提交”=> “提交”, “控制器”=> “联系人”, “动作”=> “process_form”}允许:假>已完成在3ms的
500内部 服务器错误
NoMethodError(未定义的方法`[]”为无:NilClass):
这解决了我的问题。谢谢。 – obx