7

Rails 3.2 アプリ (Ruby 1.9) で、Coffeescript でパス ヘルパーを使用すると、次のエラーが発生します。

undefined local variable or method `new_user_session_path'

私の部分的な _usermenu.html.haml では、正常に動作します:

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

私の app/assets/javascripts/metamenu.js.coffee.erb では、上記のエラーがスローされます:

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

coffeescript erb で x_path および x_url ヘルパーを使用することはできませんか?

4

2 に答える 2

13

これは、アセット内のビューコンテキスト内にいないためです。ファイルにerb拡張子を追加しても、これは変更されません。埋め込まれたrubyを評価するだけです。

これが1回限りのシナリオである場合、最善の策は単に文字列自体を使用することです。

$.get("/sign_in")

本当に必要な場合は、ヘルパーメソッドをjs変数に出力するスクリプトタグを出力するパーシャルを作成し、その方法でそれらにアクセスできます。

# 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)

また、これは、モデルのインスタンスをurlヘルパーに渡すメンバールートでは明らかに機能しないことを覚えておく価値があります。これは、coffeescriptでは絶対に利用できないためです。本番環境ではアセットがプリコンパイルされているため、動的なものは使用できません。そのためには、JS呼び出しに応答するために、コントローラーでアクションを設定することだけに頼ることができます。

于 2013-02-24T19:52:03.250 に答える
8

古い投稿ですが、まだ Google からアクセスできます。

Rails 4 (そして少なくとも 3 でも) では、ルート ヘルパーを使用して js ファイルを簡単に挿入できます。

assets/javascript/my_file.js.coffee.erb

<% self.class.include Rails.application.routes.url_helpers %>
window.index_route = '<%= index_path %>'
于 2015-09-02T16:42:07.167 に答える