#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 спасибо, как бы я использовал его в этом случае? Можете ли вы отправить ответ>?