Белый список параметров, которых нет в атрибутах модели

Я пытаюсь передать некоторые дополнительные атрибуты, которые не являются частью атрибутов модели.

 def fulfillment_params
    params.require(:fulfillment).permit(
      :id, :ids, :batch_edit_fulfillment_ids, 
        :remarks,
    )
  end

Как я должен сделать это правильно? batch_edit_fulfillment_ids это поле, которое я использую в одной из моих форм, но когда я пытаюсь сделать update(fulfillment_params) action, rails предполагает, что это одно из полей в моей модели, и выдает ошибку, что такого поля нет в модели

3 ответа

Решение

Старайтесь не передавать его fulfillment_params,
Используйте только params[:fulfillment][:batch_edit_fulfillment_ids],

Попробуйте так:

def fulfillment_params
  hash = {}
  hash.merge! params.require(:fulfillment).slice(:id, :ids, :remarks) # model attributes
  hash.merge! params.slice(:batch_edit_fulfillment_ids) # non-model attributes
  hash
end

Если batch_edit_fulfillment_ids это не поле в таблице, то вы определенно не собираетесь его обновлять. Это не имеет смысла. Таким образом, вам не нужно добавлять его в whitelist потому что вы белый список только те attributes которые могут быть обновлены пользователями.

Для получения дополнительной информации см.: https://cbabhusal.wordpress.com/2015/10/02/rails-strong-params-whilisting-params-implementation-details/

В вашем случае вы можете обратиться к ответу Алекса или если вы хотите получить доступ к значению в модели, вы можете установить его

class Fulfillment < ActiveRecord::Base
 attr_accessor :batch_edit_fulfillment_ids
end
# in controller you can set
@fulfillment.batch_edit_fulfillment_ids = params[:fulfillment][:batch_edit_fulfillment_ids]
Другие вопросы по тегам