Javascript 将变量传递到js.erb文件

Javascript 将变量传递到js.erb文件,javascript,ruby-on-rails,ruby,jplayer,Javascript,Ruby On Rails,Ruby,Jplayer,这是jplayer的代码: 歌曲/show.html.erb <% content_for :mp3script do %> <script type="text/javascript"> //<![CDATA[ $(document).ready(function(){ $("#jquery_jplayer_1").jPlayer({ ready: function () { $(this)

这是jplayer的代码:

歌曲/show.html.erb

<% content_for :mp3script do %>
    <script type="text/javascript">
    //<![CDATA[
    $(document).ready(function(){

      $("#jquery_jplayer_1").jPlayer({
        ready: function () {
          $(this).jPlayer("setMedia", {
            mp3: "<%= @song.mp3.url %>"
          }).jPlayer("play");
        },
      });
    });
    //]]>
    </script>
<% end %>
一切正常,但将JavaScript直接放在html中有点难看,因此我想将其放在
.js.erb
文件中

当我把它放在mp3script.js.erb中时,它给出了以下错误:

undefined method `mp3' for nil:NilClass

如果我成功地将javascript放入
.js.erb
中,是否每次mp3链接在生产中更改时都会重新编译javascript application.js?我认为这很糟糕,对吗?

您不能将控制器中的数据推送到资产管道中,资产管道无法访问控制器的实例变量,甚至无法访问当前请求对象,因为当资产被预编译时,它们将不存在

你目前的做法是正确的

是否每次mp3链接在生产中发生变化时都会重新编译javascript application.js


不,这不是资产管道的工作方式,这正是您无法将动态生成的JavaScript移动到
.js.erb
文件中的原因。

您能否检查
songs#show
操作是否定义了
@song
变量?@VenkatCh显然是,他特别说视图
app/views/songs/show.html.erb
有效。@VenkatCh是的,就像meagar说的,所以没有解决方案,我只是觉得在html中暴露mp3 url不好,就像that@anouar你仍然会在JavaScript中公开它,有什么区别吗?你有什么解决方案吗?所以mp3 url没有直接显示在html上,任何点击ctrl+u的人都会看到it@anouar不,那是不可能的。不管你做什么,用户都可以很容易地看到URL。好的,谢谢,我想我会把mp3 URL放在控制器后面,至少这样用户就不知道服务器上的确切位置了
undefined method `mp3' for nil:NilClass