У вас есть два варианта:
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
}