Ruby on rails 什么';在Rails中嵌入一小块javascript的最佳方法是什么?

Ruby on rails 什么';在Rails中嵌入一小块javascript的最佳方法是什么?,ruby-on-rails,Ruby On Rails,这是my application.html: <body> <div class="bg-cover"> <div class="background"> <%= render 'layouts/header' %> <main> <% flash.each do |message_type, message| %> <div class="ale

这是my application.html:

<body>
  <div class="bg-cover">
    <div class="background">
      <%= render 'layouts/header' %>
      <main>
        <% flash.each do |message_type, message| %>
          <div class="alert alert-<%= message_type %>">
            <script>Materialize.toast("<%= message %>", 5000, 'rounded <%= message_type %>', 'success')();</script>
          </div>
        <% end %>
        <%= yield %>
      </main><!--End of main-->
      <%= render 'layouts/footer' %>
    </div><!-- end of container main-->
  </div>
</body>
</html>

具体化。吐司(“、5000、‘四舍五入’、‘成功’)();

我不知道将这个脚本直接嵌入application.html是否是最佳实践。谁能告诉我最好的做法是什么?谢谢

你可以这样做,但我会把它放在一个部分:

layouts/\u flash\u message.html.erb

<% flash.each do |message_type, message| %>
  <div class="alert alert-<%= message_type %>">
    <script>Materialize.toast("<%= message %>", 5000, 'rounded <%= message_type %>', 'success')();</script>
  </div>

具体化。吐司(“、5000、‘四舍五入’、‘成功’)();
包括:

<body>
  <div class="bg-cover">
    <div class="background">
      <%= render 'layouts/header' %>
      <main>
        <%= render "layouts/flash_message" %>
        <% end %>
        <%= yield %>
      </main><!--End of main-->
      <%= render 'layouts/footer' %>
    </div><!-- end of container main-->
  </div>
</body>
</html>

实际上这样做是一种不好的做法,您应该改用不引人注目的javascript实践()任何javascript代码都是在javascript文件中编写的,而不是在视图中

为了在本例中实现这一点,您可以添加一个具有特定类的div,以防出现消息,通过
data
属性传递javascript中需要的任何参数

<div class="show-material-message" data-message="<%= message %>"></div>

哦我想我也能做到。我一直在读一些文章,每个人都在强调使用rails资产管道,而不是直接嵌入脚本。这就是为什么我想知道这是否仍然是专业的。但是谢谢。我会马上做一个局部的。是的,大多数事情你都应该这样做。但是这是一个flash的单行程序,所以不需要使用链轮,但是你可以创建一个
\u flash.js
并将其包含在
application.js
Aha中,这是我的问题。因为这只是一条线,当然,如果我直接嵌入,我会被原谅的。谢谢蔡斯,谢谢你的时间。哇。。。我真的没想到。我只知道直接输入脚本有问题。谢谢Bigsolom。
$( document ).ready(function() {
  $(".show-material-message").each(function(){
    Materialize.toast($(this).data('message'), 5000....
  });
});