Rails — как выставить attr_accessor при сборе всех атрибутов

#ruby-on-rails #attributes #gon

Вопрос:

Я использую gon драгоценный камень, чтобы получить доступ к объектам модели в интерфейсе. Итак, в моем контроллере у меня есть что-то вроде этого:

gon.items = @items

На самом деле это не gon проблема, в основном gon.items это просто массив всего @items , где каждый объект массива n имеет все атрибуты элемента n , как если бы мы должны были сделать @items[n].inspect

Я понял, что хочу создать новый атрибут, который будет помощником для интерфейса, поэтому я добавляю этот атрибут, скажем так helper_attr , как attr_accessor включено Class Item . Теперь в контроллере я строю его так:

 gon.items = @items
gon.items.each do |item|
  item.helper_attr = ...... 
end

puts gon.items.map { |i| i.helper_attr }
 

Я замечаю, что в контроллере puts правильно отображается то, что helper_attr действительно было построено правильно и доступно. Однако в интерфейсе gon.items нет атрибута helper_attr .

Есть ли способ показать это, не прибегая к неуклюжему ручному построению?

 # manual building example, instead of gon.items = @items, would do something like
gon.items = []
@items.each do |item|
  built_item = {}
  Item.attribute_names.each do |attr_n|
    built_item[attr_n] = item.send(attr_n)
  end
  built_item["#{helper_attr}"] = .....
  gon.items << built_item
end
 

Комментарии:

1. Вы пробовали использовать ActiveModel::Attributes вместо attr_accessor этого ? attr_accessor просто создает сеттер и метод получения, но на самом деле он не отслеживает «атрибуты», как ActiveModel::Attributes это делается для сериализации.

2. @max спасибо, как бы я использовал его в этом случае? Можете ли вы отправить ответ>?