Объединить ActionController::Parameters с rails 5

В rails 4 я могу объединиться! StrongParams, но с тех пор, как рельсы 5 (beta1) сливаются! не доступен. Как лучше всего это сделать в контроллере

  params = ActionController::Parameters.new({
             name: 'Francesco',
             age:  22,
             role: 'admin'
         })
         params.merge!(city: "Los Angeles")

person Olivier    schedule 05.01.2016    source источник


Ответы (4)


Насколько я вижу, от исходный код, у вас есть merge, а не merge!. Другими словами, кажется невозможным изменить хэш на месте.

Будет работать следующий код:

params = ActionController::Parameters.new({
             name: 'Francesco',
             age:  22,
             role: 'admin'
         })
params = params.merge(city: "Los Angeles")
person Simone Carletti    schedule 05.01.2016
comment
Любая идея, как объединить параметры вложенной модели? - person W.M.; 18.03.2017
comment
@В.М. типа params[:nested_params] = params[:nested_params].merge(...) - person Aleksandr K.; 26.06.2017

params.merge!(город: "Лос-Анджелес") работает с Rails5.0.1

введите здесь описание изображения

В Rails 5: ActionController::Parameters теперь возвращает объект вместо хэша.

поэтому вы должны использовать params.permit(:city).to_h для доступа к городу.

Подробнее о том, как ActionController::Parameters работает в Rails5?

Ссылка: http://www.rortuts.com/ruby-on-rails/rails5-actioncontrollerparameters/

person Vaibhav    schedule 23.02.2017

Надеюсь, это поможет кому-нибудь.

def comment_params
  params.require(:comment).permit(:title, :user_id, :color)
end

Я хочу объединить атрибут цвета с моим собственным цветовым кодом или именем. поэтому для динамического слияния атрибута цвета

Инициализируйте параметры в рельсах 5 следующим образом:

params = ActionController::Parameters.new(comment_params)
params = params.merge(color: "green")
person SSR    schedule 02.04.2016

person    schedule
comment
Пожалуйста, добавьте некоторые пояснения к вашему ответу. Ответы только на код не приветствуются на SO. Спасибо. - person Gennadii Saprykin; 23.08.2016
comment
Это работает только тогда, когда разрешены (все или некоторые) параметры. - person Mosselman; 24.11.2017
comment
Вместо этого он возвращает другую ошибку: неопределенный метод `to_h' для #‹User:0x0000000734f088› Вы имели в виду? to_s - person Alexander Gorg; 05.12.2017