将数据从控制器传递到rails中的资产js

时间:2018-02-08 06:59:56

标签: javascript ruby-on-rails fullcalendar

我正在使用rails 5.I尝试将数据从控制器(取自sql查询)传递到assest中的js文件。 我从控制器运行查询

@sample = Sample.all  

我需要在fullcalendar事件中显示数据 assets / js文件

$('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'agendaDay,listWeek,agendaWeek,month'
            },
            editable: true,
            eventLimit: true, // allow "more" link when too many events
            defaultView: 'listWeek',
            navLinks: true,
            events: [
                <% @sample.each do |sample| %>
                {
                    title: '<%= sample.title %>',
                    start:  TODAY + 'T09:00:00',
                    description: '<%= sample.description %>'
                }
                <% end %>  

它没有在fullcalendar中显示结果。如何将它从控制器传递到asset / js
非常感谢您的快速回复

2 个答案:

答案 0 :(得分:1)

一种简单的方法是将部分放在 layouts / _variables.html.erb 中,然后在应用程序布局的<script>标记中进行渲染。

例如:

<script>    
  _app.samples = [
  <% @sample.each do |sample| %>
       {
         title: '<%= sample.title %>',
         start:  TODAY + 'T09:00:00',
         description: '<%= sample.description %>'
      }
  <% end %>  
  ];
</script>

然后在原始日历中,直接使用生成的Javascript:

  $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'agendaDay,listWeek,agendaWeek,month'
        },
        editable: true,
        eventLimit: true, // allow "more" link when too many events
        defaultView: 'listWeek',
        navLinks: true,
        events: _app.samples,

layouts / application.html.erb

</script>
  <%= render partial: "layouts/_variables" %>
  <%= csrf_meta_tags %>
  ...

它的好处是您不需要使用Rails代码污染Javascript资产,并且每次刷新页面时都会更新数据,而无需额外往返服务器。

缺点是您需要单独考虑Ajax请求(尽管这是一个完全不同的问题),并且应该注意将这些变量放在特定于应用程序的结构中,以免随机变量污染您的全局空间。 / p>

答案 1 :(得分:-1)

您可以使用gon gem来解决此问题,如下例所示:

控制器文件中的

  

gon.user_id = @ user.id

js文件中的

  

的console.log(gon.user_id);

&#34; Gon gem - 在你的js中获取你的Rails变量。如果您需要将一些数据发送到您的js文件,并且您不希望通过视图和解析进行长时间的操作 - 请使用此方法!&#34;

欲了解更多信息:

https://github.com/gazay/gon