Задать вопрос

Rails 4 Как внести изменения в params?

Здравствуйте
У меня следующая ситуация в контроллере надо пересобирать хэш передаваемых параметров. Т.е. удалять некоторые, добавлять новые. В третьих рельсах это делалось в контроллере без проблем например я мог сделать так:
params[:user].delete('email')
params[:user][:username]='test'

Но в 4 рельсах strong parameters этот фокус проделать не дает. Подскажите есть ли вариант , не отключая strong parameters , внести изменения в коде контроллера в параметры. Вариант с before_action не подходит.
  • Вопрос задан
  • 309 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
insiki
@insiki
broken pipe
Добавить к params можно например в контроллере с помощью deep_merge!.
Пример:
def card_params
  params.require(:card).permit(:original_text, :translated_text, :review_date, :image, :deck_id, deck: [:title]).deep_merge(deck: {user_id: current_user.id})
end


Также можно создать свой метод в модели и использовать ваш вариант с delete:
def self.create_with_deck(params)
  deck_params = params.delete(:deck)
  if params[:deck_id].blank?
    deck = Deck.create(deck_params)
    params.deep_merge!(deck_id: deck[:id])
  end
  create(params)
end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы