Передача нескольких переменных рельсы в JavaScript

У меня есть некоторые значения в ruby ​​(переменные и объекты / хэш), которые я хочу передать в JavaScript на визуализированной странице. В настоящее время я использую эти методы, чтобы просто написать JavaScript-код объявления переменных на стороне клиента.

  def declare_as_js_vars vars
    string = ""
    vars.each do |name, value|
      string += self.declare_as_js_var(name, value)
    end
    string
  end

  def declare_as_js_var name, value
    name.to_s + "='" + value.to_s + "';"
  end

Проблема здесь в том, что я не могу объявить объекты, и мне приходится объявлять переменные индивидуально. Мне было интересно, если в рельсах есть какой-то способ легко сделать это, потому что это оказывается довольно взломать.

Как я должен передать переменные и объекты в JavaScript? Пожалуйста, предоставьте пример синтаксиса

7 ответов

Уже немного поздно, но, возможно, это поможет другим. Есть хороший гем под названием gon, который очень полезен для передачи переменных из rails в javascript. Вы также можете отправить весь объект.

В контроллере может быть что то подобное

@your_int = 123
@your_array = [1,2]
@your_hash = {'a' => 1, 'b' => 2}
gon.your_int = @your_int
gon.your_other_int = 345 + gon.your_int
gon.your_array = @your_array
gon.your_array << gon.your_int
gon.your_hash = @your_hash
gon.your_object = Table.find(params[:id])

тогда в javascript он будет доступен как

alert(gon.your_int)
alert(gon.your_other_int)
alert(gon.your_array)
alert(gon.your_hash)
alert(gon.your_object.name)

Об этом также есть Railscast.

Мне нравится использовать теги сценария типа JSON, чтобы выполнить работу. Это позволяет избежать загрязнения глобального пространства имен, и в Rails оказывается отличная поддержка для сериализации объектов в JSON.

Вы можете использовать что-то вроде этого в вашем представлении:

<script id="my_vars_json" type="text/json">
    <%= @my_vars.to_json %>
</script>

Тогда вам решать проанализировать JSON с помощью JavaScript. Мне нравится использовать JQuery:

$(function () {

    var myVarsJSON = $("#my_vars_json").html(),
        myVars     = $.parseJSON(myVarsJSON);

    console.log(myVars);

});

Надеюсь, это поможет!

Мне нужно было получить имя пользователя из базы данных и передать значение в переменную javascript в формате JSON.

Затем я объявил ruby переменная с именем токена, которая принимает id а также firstname атрибут из пользовательской таблицы,

  ActiveRecord::Base.include_root_in_json = false

  @token = User.all.to_json(only: [:id, :firstname])

в erb файл, я использовал следующую строку,

var tokenList = <%= @token.html_safe %>

Я думаю, что использование Gon Gem будет лучшим решением. также проверьте это видео броски

Я нашел эту переменную клиента Gem, это выглядит многообещающе. Ваша конфигурация и переменная передаются клиенту, и вы можете легко получить или установить в клиенте

Может быть, вам стоит попробовать поработать с objects.to_json;)

Взгляните на это.

http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

Один из самых простых способов - использовать файл js.erb, где вы можете использовать теги ruby ​​для доступа к переменным, которые вы определили в действии контроллера.

Вам нужно использовать блок response_to в действии контроллера, указав действие, чтобы иметь возможность отвечать на javascript.

items_controller.rb

class ItemsController < ApplicationController

  def action
    respond_to do |format|
      format.js
      #format.html {}    #  These are for allowing other types of formats to be responded to.
      #format.json {}    #  But they are not necessary for using this js.erb way of doing things.
    end
  end

end

/views/items/action.js.erb

$(div).html('The cat has erased your page');
Другие вопросы по тегам