将信息从ruby传递到js脚本标签

时间:2013-03-16 20:57:56

标签: javascript ruby-on-rails

我有一个Rails应用程序,在检查访问用户的个人资料页面的用户是否是当前用户(使用ruby代码)之后,根据条件逻辑的结果调用JavaScript方法,如下所示。

有没有办法将用户名(在<%= @ user.name%>的ruby代码中提供)传递到脚本标记中,这样我也可以将其传递给javascript函数调用(除了我传递的其他参数)。

/views/users/show.html.erb

<% if current_user?(@user) %> #@user represents the user who's profile page is being visited

        <script type='text/javascript'> 
        $(document).ready(function() {     #I want to get <%= @user.name %> inside here
          var currentuser = true; 
        app.views.user_view.compTemplates(currentuser)});
       </script>

<% else %>

   ...code ommitted...

<% end %>

更新

根据对此问题的第一个答案的建议,我在脚本标记内执行了此操作。

   var currentusername =  <%=  @user.name %>;

然而,一旦&lt;%= @ user.name%&gt;评估(对于'Veronica',在这个例子中),Veronica第一次出现在js代码中,现在正在注册错误'Veronica is undefined'

2 个答案:

答案 0 :(得分:1)

我相信你正在寻找:http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript

给出的例子:

$('some_element').replaceWith('<%=j render 'some/element_template' %>');

$('some_element').replaceWith('<%= escape_javascript render 'some/element_template' %>');

对于您的特定示例,您也可以这样做:(我认为不需要to_json

<script type='text/javascript'> 
  $(document).ready(function() {
    var currentuser = true;
    var userName = <%= @user.name.to_json %>;
  app.views.user_view.compTemplates(currentuser)});
</script>

答案 1 :(得分:0)

内联Ruby必须进入#{}标记。

var currentusername =  '#{ <%= @user.name %> }';