Белый список параметров, которых нет в атрибутах модели
Я пытаюсь передать некоторые дополнительные атрибуты, которые не являются частью атрибутов модели.
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]