Jquery 在js.erb的if语句中计算nil时出现错误
我在Rails 3.0.10中有一个index.js.erb文件,如下所示:Jquery 在js.erb的if语句中计算nil时出现错误,jquery,ruby-on-rails-3,erb,null,Jquery,Ruby On Rails 3,Erb,Null,我在Rails 3.0.10中有一个index.js.erb文件,如下所示: $('.loading').hide() if ("<%= @id %>" && "<%= @session %>") { alert("<%= @id %> <%= @session[:open] %>") } if @element != "chkbx" @session[:open] = !@session[:open] else @s
$('.loading').hide()
if ("<%= @id %>" && "<%= @session %>") {
alert("<%= @id %> <%= @session[:open] %>")
}
if @element != "chkbx"
@session[:open] = !@session[:open]
else
@session = nil
end
@id = params[:id]
$('.loading').hide()
if (id && session) {
alert(something);
}
当@element!=“chkbx”
,一切正常,但在其他情况下,我会出现以下错误:
ActionView::Template::Error (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]):
1: $('.loading').hide()
2: if ("<%= @id %>" && "<%= @session %>") {
3: alert("<%= @id %> <%= @session[:open] %>")
4: }
5:
6:
app/views/search/index.js.erb:3:in `_app_views_search_index_js_erb___1015507201_70338196455640_0'
app/controllers/search_controller.rb:32:in `index'
ActionView::Template::Error(当您没有预料到它时,您有一个nil对象!
您可能期望数组的一个实例。
计算nil时出错。[]):
1:$('.loading').hide()
2:如果(“&&&”){
3:警报(“”)
4: }
5:
6:
app/views/search/index.js.erb:3:in`_app_views_search_index_js_erb_1015507201_70338196455640_0'
app/controllers/search_controller.rb:32:in'index'
这不是很奇怪吗?当发现@session
是nil
时,js.erb中的if不应该停止执行吗?我还在控制器中尝试了@session=false
当我注释掉js.erb-file中代码行开头的/
时,我也遇到了类似的问题。代码仍会被评估并生成错误
关于js.erb文件有什么我还不了解的吗?问题是,erb必须将erb代码渲染成js代码,以便在渲染过程中erb对
if
块中的表达式求值(否则它将无法将代码渲染成js)
现在,如果您只有这样的JS代码:
$('.loading').hide()
if ("<%= @id %>" && "<%= @session %>") {
alert("<%= @id %> <%= @session[:open] %>")
}
if @element != "chkbx"
@session[:open] = !@session[:open]
else
@session = nil
end
@id = params[:id]
$('.loading').hide()
if (id && session) {
alert(something);
}
那么是的,它对if
块中的任何内容进行评估都会很奇怪,因为它应该在会话中失败
我只需要稍微重写一下您的代码:
$('.loading').hide()
if ("<%= @id %>" && "<%= @session %>") {
<% if @session %>
alert("<%= @id %> <%= @session[:open] %>")
<% end %>
}
或对于单行代码:
<%# your_ruby_code_goes_here %>
非常感谢!这是可以理解的!现在它开始工作了。:-)不得不从'Yeah抱歉,我使用了HAML,所以我对ERB语法不是很在行:')中删除