получить значение объекта, используя ajax в рельсах - PullRequest
0 голосов
/ 24 августа 2018

Я новичок в Javascript и rails, поэтому, пожалуйста, учтите, что я не очень хорош в этом. У меня есть базовые AJAX звонки

Аякс:

 $.ajax({
  type: "get",
  url: "/url",
  data: $('#somedata').serialize(),
  success: function(response){

    for (i = 0; i < response.length; i++) {
        $('#something').append(response[i].name);
         }
  },

контроллер (действие)

  def random_action
    @obj = Model.all
      respond_to do |format|
        format.json {render json: @obj.pluck(:name).to_json}
        format.html
      end
    end

вид:

 <li id="something"></li>

Когда я проверял консоль, она захватывает некоторые данные, но отображается как

[{"id:1","name:something"},{"id:2","name:okay"}]

и мне нужно только имя , поэтому я собирался попробовать что-то добавить имя только в моем представлении html.

как-то так, так что тег <li> имеет имя данных. помогите пожалуйста ребята: (

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вы могли бы что-то вроде этого:

@objects = Model.select(:name)

Что он делает, это возвращает коллекции записей только с name значениями.

Определение div с идентификатором вваш HTML.

<div id='links' />

В вашем файле JS вы можете сделать это:

var div = $("div#links")    
elements.map((element) => div.append('<li>' + element.name + '</li>'));

Надеюсь, это помогло.

0 голосов
/ 24 августа 2018

У вас есть два варианта:

1) Ответить только с именами:

render json: @obj.pluck(:name).to_json

или 2) перебрать элементы в обратном вызове JavaScript и вызвать element.name

for (i = 0; i < response.length; i++) {
  $('#something').append(response[i].name);
}

РЕДАКТИРОВАТЬ: изменено для / in на синтаксис for (i .... i ++), изменено «elements» на «response», поскольку «elements» - это строка, «response» - фактически массив

EDIT3: я обновлю ответ, так как вопрос меняется в комментариях. Я постараюсь объяснить это немного.

Во-первых, вам нужно понять, что "@obj" - это действительно плохое имя для переменной, и у вас есть не объект, а набор объектов, потому что вы делаете "Model.all". Может быть, вы можете назвать это @objects или более описательным словом.

Затем, когда вы делаете @ objects.pluck (: name), он возвращает массив с именем каждой записи. Теперь, когда вам нужно больше атрибутов, вы можете использовать pluck (: name,: age), и он вернет массив пар массивов, где позиция 0 - это имя, а позиция 1 - это возраст.

Вы можете просто сделать to_json для этого массива и ответить результатом, но я бы посоветовал упростить преобразование его в массив хэшей перед вызовом to_json:

@objects.pluck(:name, :age).map{|arr| {name: arr[0], age: arr[1]}}

Теперь у вас есть массив хэшей, и вы сможете делать «element.name» или «element.age» в обратном вызове javascript.

Подводя итог, вы будете делать

render json: @objects.pluck(:name, :age).map{|arr| {name: arr[0], age: arr[1]}}.to_json

и ваш javascript для цикла будет

for (i = 0; i < response.length; i++) {
  name = response[i].name;
  age = response[i].age;
  // do something with those values, add li elements, whatever you want
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...