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

时间:2015-04-19 02:24:12

标签: ruby-on-rails ruby coffeescript haml

我是更新的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变量?

提前致谢!

2 个答案:

答案 0 :(得分:2)

Coffee Script和Rails引擎关系?

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

我该怎么办?

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

它如何调用method.js.erb?

使用它:

respond_to do |format|
  format.js
end

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

希望有所帮助

答案 1 :(得分:1)

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

您放在coffee:中的任何内容必须才是有效的CoffeeScript。正如其他人在评论中指出的那样,如果你想让Rails通过JS做一些事情,你就需要Ajax。

例如,要使用Ajax创建Model,请在JS中设置一个带有create操作和post的控制器。

有关详细信息,请参阅优秀的Working with JavaScript in Rails教程。