【问题标题】:Rails 4 Inherited Resources throwing ConstraintException when postingRails 4 Inherited Resources在发布时抛出ConstraintException
【发布时间】:2014-01-23 02:48:03
【问题描述】:

我有一个非常简单的模型,称为处理名称和描述,其中名称不可为空。

当我将以下内容发布到 /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 'rails', '4.0.2'

gem 'inherited_resources'

有什么想法吗?

【问题讨论】:

  • 您实际上将 Deal 对象保存在哪里?
  • 继承的资源处理保存。我不需要做任何事情来让它工作。我已经在 rails 3.x 和 ruby​​ 1.9.x 上的一个旧项目完成了这项工作

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


【解决方案1】:

参数

首先,您的strong params 不正确:

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

正如this blog post 和这个github post 中提到的,除非使用上面的代码,否则你会得到错误!


保存

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

您似乎正在使用 API,因此它可能会直接发送到模型;无论哪种方式,您都必须详细说明如何保存入站数据

【讨论】:

  • 我会尝试你建议的 params.permit 语法,但保存部分,我想我不明白你的意思。继承的资源控制器应该自动处理所有的保存。我使用控制器来检索没有问题的交易。
  • 你的答案部分正确,但我会给你。正确的语法是:params.permit(:deal => [:name]) 如果可以,请编辑您的答案:) - 谢谢
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多