Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在js.erb的if语句中计算nil时出现错误_Jquery_Ruby On Rails 3_Erb_Null - Fatal编程技术网

Jquery 在js.erb的if语句中计算nil时出现错误

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

我在Rails 3.0.10中有一个index.js.erb文件,如下所示:

$('.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语法不是很在行:')中删除