2016-02-09 2 views
1

Im, использующий Grape и не могу понять, почему я не могу изменить params Mash.Ruby Mash с использованием

class Publisher < ActiveRecord::Base 
    end 

После работает отлично:

post do 
    Publisher.create!({ 
     name: params[:name], 
     partner_id: @current_partner.id 
    }) 
    end 

и создает новую запись в моей БД с name и partner_id при условии

, но у меня есть много записей в params, поэтому я хочу, чтобы просто добавить partner_id к их.

post do 
    p params 
    params.partner_id = @current_partner.id 
    p params 
    Publisher.create!(params.require(:name, :partner_id)) 
    end 

выход:

#<Hashie::Mash name="myName"> 
#<Hashie::Mash name="myName" partner_id=1> 

но вставка строки в БД с NULL в partner_id колонке

ли неправильное использование?

Также я не могу использовать только params в update() из-за ActiveModel::ForbiddenAttributesError Правильно ли это обход?

ответ

0

Я заметил, что не только partner_id равна нулю, но name также. Поэтому решение Publisher.create!(params.to_h) решало мою проблему.

0

Что касается params в update(), это функция безопасности в Rails под названием Strong Parameters; см. https://blog.8thlight.com/will-warner/2014/04/05/strong-parameters-in-rails.html и http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters для получения дополнительной информации.

Что касается вашего первого вопроса, я думаю, что ваш призыв к require должен быть permit вместо:

Publisher.create!(params.permit(:name, :partner_id))

Но это зависит от того, если ваши имена параметров запроса являются Rails типа, т.е. publisher[name], или голый, как в name. Если вы делаете параметры Rails-как, вы хотите:

Publisher.create!(params.require(:publisher).permit(:name, :partner_id))

+0

Я думаю, что БД в порядке, потому что, если я вернусь к первому примеру (под «Следом работает нормально»), он снова работает отлично. – Yaroslav

+1

Вы верны, перечитав свой вопрос, я понимаю, что у вас уже есть столбец, добавленный в таблицу. Я обновил свой ответ, извинился. – bloopletech

+1

Обновленный мой ответ снова, я думаю, что теперь я решил основную причину вашей проблемы. Это научит меня быстро отвечать на вопросы. – bloopletech

Смежные вопросы