新手问题 请教一个问题,出现 NoMethodError 错误

lanqiu1986 · January 16, 2018 · Last by lanqiu1986 replied at January 19, 2018 · 4737 hits

在 controller 的 inquire 中定义如下语句

def inquire
  start_date = Date.civil(params[:start_date][:year].to_i, params[:start_date][:month].to_i, params[:start_date][:day].to_i)
...
end

html 这样写的

<%= form_tag inquire_jobs_path, method: "get" do %>
  <%= select_date Date.today, prefix: :start_date %>
  <%= select_date Date.today, prefix: :end_date %>
  <%= submit_tag("查询") %>
<% end %>

但出现如下错误

NoMethodError in JobsController#inquire
undefinded method '[]' for nil:NilClass

params[:start_date] 是 nil

2 Floor has deleted

我把 html 也发上来了,哪里写的不对么?😂

看看你的控制台里 Parameters 里面是什么

5 Floor has deleted
nil.class #NilClass
nil[] #NoMethodError: undefined method `[]' for nil:NilClass
Reply to michael0015

是这样啊 def inquire start_date = Date.civil(params[:start_date][:year].to_i, params[:start_date][:month].to_i, params[:start_date][:day].to_i) ... end

参数不正确,进来的参数如果是必填的,要做下检查

data_values = params.require(:start_data).require([:year, :date, :month])
start_date = Date.civil(*data_values)

如果有参数漏了,就做下异常处理

Reply to adamshen

请问,我这样写 html 对么

<%= form_tag inquire_jobs_path, method: "get" do %>
  <%= select_date Date.today, prefix: :start_date %>
  <%= select_date Date.today, prefix: :end_date %>
  <%= submit_tag("查询") %>
<% end %>

还是提示参数为空

Reply to lanqiu1986

没有看出有什么问题,参数你看下日志,是自动打印的。

Reply to adamshen

按照你的改了,又出现了这个错误😂

Reply to lanqiu1986

自己转一下类型啊

params.require(:start_data).require([:year, :date, :month]).map(&:to_i)
Reply to adamshen

it works! 非常感谢🙏

Reply to adamshen

为什么重新登录又出现这个,感觉是第一次访问这个页面时,没有初始值,所有提示为空??

Reply to lanqiu1986

在 controller 中,给参数赋值初始值就好了

def inquire
  params[:start_date] ||= { "year" => "2018", "month" => "1", "day" => "1" }
...
end
You need to Sign in before reply, if you don't have an account, please Sign up first.