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

Другие вопросы по тегам