Rails 4 Inherited Resources, выбрасывающие ConstraintException при публикации
У меня есть довольно простая модель под названием Deal с именем и описанием, где имя не обнуляется.
Когда я публикую следующее в /api/deals
{"name":"oaeu"}
Я получаю ошибку
SQLite3::ConstraintException: deal.name не может быть НЕДЕЙСТВИТЕЛЕН: INSERT INTO "deal" ("made_at", "updated_at") ЗНАЧЕНИЯ (?,?)
Моя модель
enter code here
Мой контроллер
class DealsController < InheritedResources::Base
protected
def permitted_params
params.require(:deal).permit(:name)
end
end
Моя модель
class Deal < ActiveRecord::Base
end
Я не могу понять, что происходит!!!
Мой Gemfile включает в себя:
драгоценный камень 'рельсы', '4.0.2'
а также
драгоценный камень "в наследство_ресурсы"
Есть идеи?
2 ответа
Params
Во-первых, ваш strong params
неверны:
def permitted_params
params.permit(deal: [:name])
end
Как упомянуто в этом сообщении блога и этом сообщении github, вы будете получать ошибки, если не будете использовать вышеуказанный код!
экономия
Как уже упоминалось в комментариях, кажется, что ваш процесс сохранения обходит ваш контроллер унаследованных ресурсов
Кажется, вы используете API, так что, возможно, его отправляют прямо в модель; в любом случае вам придется подробно описать, как вы сохраняете входящие данные.
Кажется, вам нужно переписать метод #resource_params в вашем контроллере.
def resource_params
[ params.require(:deal).permit(:name) ]
end
См.: https://github.com/josevalim/inherited_resources/issues/236 http://blog.josemarluedke.com/posts/inherited-resources-with-rails-4-and-strong-parameters