【发布时间】:2014-01-06 23:05:50
【问题描述】:
我有以下代码:
<% if params %>
<% puts 'user params are' + params['user'].inspect.to_s %>
<% if params['user']['type'] == 'Student' %>
<div class="signup-popup-bg-failure sign-freelancer"><% puts 'opt1stud' %>
<% else%>
<div class="signup-popup-bg sign-freelancer"><% puts 'opt2stud'%>
<% end %>
<% else %>
<div class="signup-popup-bg sign-freelancer"><% puts 'opt3stud'%>
<% end %>
这会返回错误:
undefined method `[]' for nil:NilClass
和线
<% if params['user']['type'] == 'Student' %>
突出显示。
我正在尝试根据参数更改显示的 css 类。
如果
params['type']['student']
存在,我希望类是:
<div class="signup-popup-bg-failure sign-freelancer">
如果
params['type']['Employer']
存在,我希望类是:
<div class="signup-popup-bg-failure sign-freelancer">
如果没有参数,我希望类是
<div class="signup-popup-bg sign-freelancer">
我不明白为什么会出现这个错误。该页面说没有参数,因此甚至不应该执行此代码。更奇怪的是,没有一个“puts”语句被执行。这也没有意义,因为 if/else 逻辑规定必须执行其中一个 puts 语句。有谁知道如何让这个代码工作?
【问题讨论】:
-
显然你的
params['user']是nil。包含user params are:的行打印了什么? -
是的,它们是零。打印出来的是:“user params arenil”
-
所以你不能做
nil[],这就是你得到错误的原因。 -
是的 [] 是一个方法调用,并且您正在调用对 nil 的引用。您应该将参数传递给控制器中合适的模型,并在视图中使用某些模型实体的实例。
标签: ruby-on-rails devise ruby-on-rails-4 params