Rails 4继承资源在发布时抛出ConstraintException

时间:2014-01-23 02:48:04

标签: ruby-on-rails ruby-on-rails-4 inherited-resources

我有一个非常简单的模型名为Deal with name and description,其中name是不可为空的。

当我将以下内容发布到/ api / deals

{"name":"oaeu"}

我收到错误

  

SQLite3 :: ConstraintException:deals.name可能不是NULL:INSERT INTO“deals”(“created_at”,“updated_at”)VALUES(?,?)

我的模特

enter code here

我的控制器

class DealsController < InheritedResources::Base

   protected
   def permitted_params
     params.require(:deal).permit(:name)
   end
end

我的模特

class Deal < ActiveRecord::Base
end

我无法弄清楚发生了什么!!!

我的Gemfile包括:

  

gem'trail','4.0.2'

  

gem' inherited_resources'

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

<强> PARAMS

首先,您的strong params不正确:

  def permitted_params
     params.permit(deal: [:name])
  end

this blog postgithub post中所述,除非使用上述代码,否则会出错!


<强>保存

如评论中所述,您的保存过程似乎绕过您继承的资源控制器

似乎你正在使用API​​,所以也许它直接发送到模型;无论哪种方式,您都必须详细说明如何保存入站数据

答案 1 :(得分:0)

您似乎需要覆盖控制器中的#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