Rails 4 - удаление атрибутов из уже отфильтрованного запроса Active Record
В одном из моих контроллеров ruby на Rails 4 у меня есть метод, который вводит данные, необходимые для View.
Необходимые данные варьируются между данными, необходимыми для HTML, и данными, необходимыми для JavaScript. Я использую GON для ввода данных в сценарии JS.
Мое приложение работает нормально, но gon вводит в HTML (FYI в скрипте чуть ниже тега body) слишком много данных, поскольку мне нужно только для Gon/Javascript 2 из 5 атрибутов, необходимых для представления HTML. (Причина, по которой вы хотите, чтобы: поскольку я загружаю много объектов, разница в байтах для файла HTML очень значительна)
def inject_deal_steps_data
# Used in html view
@steps = @deal.steps.select(:attribute1,
:attribute2,
:attribute3,
:attribute4,
:attribute5). order(attribute4: :asc)
# Used in js file
gon.push( { deal_steps: @steps } ) if @steps
end
Я пытался использовать такие методы, как unscope, как показано ниже, но это не сработало.
def inject_deal_steps_data
# Used in html view
@steps = @deal.steps.select(:attribute1,
:attribute2,
:attribute3,
:attribute4,
:attribute5). order(attribute4: :asc)
# Used in js file
gon.push( { deal_steps: @steps.unscope(:attribute1,:attribute3,:attribute4 } ) if @steps
end
Я не хочу создавать другой новый выбор, как показано ниже, так как он создает новый запрос / попадание в базу данных.
@steps = @deal.steps.select(:attribute1,
:attribute2,
:attribute3,
:attribute4,
:attribute5). order(attribute4: :asc)
gon.push( { deal_steps: @deal.steps.select(:attribute2,:attribute5) } ) if @deal.steps
Я хочу повторно использовать для GON те же самые @steps, созданные для HTML, но удалить из него 3 атрибута.
1 ответ
Ты можешь использовать as_json
контролировать то, что будет выставлено to_json
, gon
звонки to_json
внутренне, чтобы преобразовать ruby
Возражать javascript
объект и выставляет его на вид.
Попробуйте следующее:
def inject_deal_steps_data
# Used in html view
@steps = @deal.steps.select(
:attribute1,
:attribute2,
:attribute3,
:attribute4,
:attribute5
).order(attribute4: :asc)
# Used in js file
gon.push({
deal_steps: @steps.as_json(except: [:attribute1,:attribute3,:attribute4])
}) if @steps
end
Обзор as_json
для дополнительной информации.