Как назначить значение контроллера Rails постоянной JavaScript - PullRequest
1 голос
/ 12 марта 2020

У меня есть константа в функции JavaScript, которая должна принимать значение из контроллера Rails или напрямую из конечной точки JSON.

Вот действие контроллера, которое возвращает нужное мне значение :

class EventsController < ApplicationController

def calendar
    client = Signet::OAuth2::Client.new(client_options)
    client.update!(session[:authorization])
    service = Google::Apis::CalendarV3::CalendarService.new
    service.authorization = client

  @calendar_list = service.list_calendar_lists.items

  rescue Google::Apis::AuthorizationError
    response = client.refresh!
    session[:authorization] = session[:authorization].merge(response)
    retry
  end

Это действие контроллера также имеет соответствующую конечную точку JSON, localhost:3000/calendar.json:

Этот JavaScript находится в моем файле application.rb. Я попытался передать мою calendarList константу переменной экземпляра @calendar_list, но это не сработало.

function getEventSources(){
  const calendarList = <%= @calendar_list %>
  const keyArray = calendarList.map(cal => {
  return 'googleCalendarId'
  })

  const calendarIds = calendarList.map(cal => {
  return cal["id"]
  })

  eventSources = []

  for(i=0; i < keyArray.length; i++) {
    var obj = {}
    obj[keyArray[i]] = calendarIds[i]
    eventSources.push(obj);
  }
return eventSources
};

Это моя конечная точка /calendar.json:

[
  {
    id: "en.usa#holiday@group.v.calendar.google.com",
    summary: "Holidays in United States"
  },
  {
    id: "nba_1_%41tlanta+%48awks#sports@group.v.calendar.google.com",
    summary: "Atlanta Hawks"
  }
]

Нужно ли мне сделать какой-то тип AJAX вызова для получения этого значения или есть более простой способ?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Я полагаю, что вы должны либо заключить встроенную переменную Rails в одинарные кавычки, например

'<%= @calendar_list %>'

, либо, если переменная содержит массив объектов, что, как я полагаю, происходит, поскольку она описывается как список, вы должны JavaScript проанализировать его как JSON объект.

В основном данные из Rails не в формате, который JavaScript знает, как их интерпретировать, поэтому вам нужно отформатировать их как строку или объект, чтобы JavaScript мог их прочитать.

0 голосов
/ 12 марта 2020

Я переместил свой javascript в файл html.erb и из application.js

Так я передал значение контроллера моей JavaScript константе

const calendarList = <%= raw @event_list %>

это добилось цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...