如何在haml模板中的coffeescript中的ruby代码中使用本地或实例变量

我是更新的rails并且面临复杂的问题,试图在haml模板中的coffeescript中使用ruby helper方法中的变量。

这是我的haml代码

:coffee $('input#field').blur -> input = $('input#field').val() #{ ruby_method( input )} 

ruby_helper.rb

 def ruby_method (arg) if arg @model = Model.new(arg) end end 

这导致如下错误

未定义的局部变量或方法

还尝试了实例变量

 :coffee $('input#field').blur -> @input = $('input#field').val() #{ ruby_method( @input )} 

这不能将它传递给辅助方法。

如何在ruby helper方法中获取javascript变量?

提前致谢!

简短的回答是,你做不到。 Ruby在您的服务器上运行,但您放入模板中的任何JavaScript(CoffeeScript发出的)都将在浏览器中运行。

你放入coffee:任何东西coffee:必须是有效的CoffeeScript。 正如其他人在评论中指出的那样,如果你希望Rails通过JS做一些事情,你需要Ajax。

例如,要使用Ajax创建Model ,请使用create action设置控制器并在JS中发布。

有关更多详细信息,请参阅Rails中的优秀使用JavaScript教程。

咖啡脚本和Rails引擎关系?

rails和coffee脚本之间没有任何关系,并且可以在咖啡脚本中访问rails中的任何内容。

那我该怎么办?

只需在视图文件夹中创建def.js.erb文件并编写您的javascript代码即可。 在此文件中,您可以访问方法中的所有实例变量。

它如何调用method.js.erb?

用这个:

 respond_to do |format| format.js end 

这将调用method.js.erb文件而不是method.html.erb文件。

希望能帮助到你