Rails 路径助手在 js.coffee.erb 中不起作用 [英] Rails path-helpers doesn't work in js.coffee.erb

查看:35
本文介绍了Rails 路径助手在 js.coffee.erb 中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

In my Rails 3.2 app (Ruby 1.9) I get following error when using path helpers in Coffeescript.

undefined local variable or method `new_user_session_path'

In my partial _usermenu.html.haml that works fine:

= link_to t('user.login'), new_user_session_path

In my app/assets/javascripts/metamenu.js.coffee.erb that throws above error:

$.get("<%= new_user_session_path %>")

Isn't it possible to use x_path and x_url helpers in coffeescript erb's?

解决方案

This is because you are not within the view context inside of your assets. Adding an erb extension to the file doesn't change this, it simply allows you to evaluate embedded ruby.

If this is a one-off scenario, your best bet is to simply use the string itself.

$.get("/sign_in")

If you really wanted to you could create a partial that output a script tag that output your helper methods into js variables and access them that way.

# in your layout

<%= render 'url_helpers' %>

# in app/views/layouts/_url_helpers.html.erb

<script>
  window.new_user_session_path = "<%= new_user_session_path %>";
  # add more if necessary
</script>

# in your coffeescript

$.get(@new_user_session_path)

Also worth keeping in mind that this will obviously never work for member routes where your passing an instance of a model to the url helper as that is definitely not available to coffeescript. Remember, in production assets are precompiled so you can't use anything dynamic. For that you can only really rely on setting up actions in your controller to respond to JS calls.

这篇关于Rails 路径助手在 js.coffee.erb 中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆