Ruby on rails ruby无法在.js.coffee for ajax响应中找到coffeescript

Ruby on rails ruby无法在.js.coffee for ajax响应中找到coffeescript,ruby-on-rails,ruby-on-rails-3,coffeescript,erb,actionview,Ruby On Rails,Ruby On Rails 3,Coffeescript,Erb,Actionview,我使用的是Rails 3.1,在我的create_error.js.coffee查看AJAX响应文件中的CoffeeScript语句之后,似乎无法使用Ruby脚本 如果我这样做,它将工作: <% if @attached_image.errors.any? %> alert 'something is wrong' <% end %> 提醒“出了问题” 但是如果它与下面类似,在CoffeeScript语句之后加上一个 errors_block = '<di

我使用的是Rails 3.1,在我的
create_error.js.coffee
查看AJAX响应文件中的CoffeeScript语句之后,似乎无法使用Ruby脚本

如果我这样做,它将工作:

<% if @attached_image.errors.any? %>
  alert 'something is wrong'
<% end %>

提醒“出了问题”
但是如果它与下面类似,在CoffeeScript语句之后加上一个

errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
  something..
<% end %>
错误\u块=“”
某物
我总是会在
if
行中得到一个异常
ActionView::Template::Error(第6行的解析错误:意外的“缩进”)
。我尝试了几个示例,每次ruby
出现在coffeescript语句之后时都会出现这种情况


为什么会这样?

您的文件应该被调用:

create_error.js.coffee.erb

所以你可以在上面添加ruby。

听起来你的post ERB CoffeeScript中遇到了缩进问题。鉴于此:

errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
  something...
<% end %>
这个缩进开始了一个新的块,在这个上下文中没有意义;因此,CoffeeScript编译器出现了“意外的“缩进”错误。您可以在中看到这一点

CoffeeScript对缩进非常敏感,所以像这样混合ERB和CoffeeScript不是个好主意。您最好将
@附加的\u image.errors
放入CoffeeScript变量,然后在CoffeeScript中执行逻辑,类似这样的操作(未测试的代码):


但这更难读,你会忘记的。您最好使用ERB生成CoffeeScript数据,并让CoffeeScript处理逻辑。

我昨天发现了这一点,它告诉我使用js.coffee(没有ERB部分),并且它实际上与ruby代码部分配合得很好,只是如果CoffeeScript语句之一之后出现
,那么CoffeeScript处理器将无法通过。但它的工作方式正好相反,或者介于两者之间。我将对问题进行编辑以使其更清楚。嗨,穆,我试图使用
error\u msgs=
,但我得到
ActionView::Template::error(第1行的保留字“var”)
。有什么我又做错了吗?尝试添加一个
html\u-safe
以防止它对引号进行编码,请查看我的更新。hi mu,如果我添加html\u-safe,则:或[]和{}将被html编码删除,然后字符串不再是json字符串,但我受到您的启发并回答了我自己的问题。@larryzhao:只需添加
html\u safe
就可以了(至少对我来说是这样)。
errors_block = '<div id="errors_block"></div>'

  something...
errors = <%= @attached_image.errors.to_a.to_json.html_safe %>
errors_block = '<div id="errors_block"></div>'
if errors.length > 0
  something...
errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
something..
<% end %>