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

passing information from ruby into js script tags

本文关键字:js 脚本 标签 信息 ruby      更新时间:2023-09-26

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

是否有一种方法可以将用户名(在<%= @user.name %>的ruby代码中可用)传递到脚本标记中,以便我也可以将其传递到正在调用的javascript函数中(除了我传递的其他参数之外)。

/视图/用户/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 %>;

然而,一旦<%= @user.name %>求值(在本例中为'Veronica'), Veronica第一次出现在js代码中,并且现在注册了一个错误'Veronica is undefined'

我相信你正在寻找这个: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>

内联Ruby必须在#{}标签内。

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