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

lanqiu1986 · 2018年01月16日 · 最后由 lanqiu1986 回复于 2018年01月19日 · 4737 次阅读

在 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 楼 已删除

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

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

5 楼 已删除
nil.class #NilClass
nil[] #NoMethodError: undefined method `[]' for nil:NilClass
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)

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

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 %>

还是提示参数为空

lanqiu1986 回复

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

adamshen 回复

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

lanqiu1986 回复

自己转一下类型啊

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

it works! 非常感谢🙏

adamshen 回复

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

lanqiu1986 回复

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

def inquire
  params[:start_date] ||= { "year" => "2018", "month" => "1", "day" => "1" }
...
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号