Rails额外的参数无处不在

时间:2015-10-07 11:32:05

标签: ruby-on-rails ruby controller params

我有一个可以接受4个参数的轨道控制器:

 def transaction_params
  params.require(:transaction).permit(:id, :amount, :type, :parent_id)
end

我使用Curl发出以下PUT请求以创建Transaction的新记录:

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X PUT -d '{ "amount": 5000, "type": "cars" }'

但是,当我试图将其保存到数据库时

transaction = Transaction.new(transaction_params)
...

我收到以下错误:

Invalid single-table inheritance type: cars is not a subclass of Transaction

Rails尝试使用的参数列表如下:

Parameters: {"amount"=>5000, "type"=>"cars", "id"=>"10", "transaction"=>{"amount"=>5000, "type"=>"cars"}}

我无法弄清楚为什么我有一个嵌套的"交易"用参数破坏所有东西的哈希键。

你能帮帮我吗?

2 个答案:

答案 0 :(得分:2)

关于:

  

无效的单表继承类型:cars不是Transaction

的子类

问题是:type是Rails中的保留字,用于单表继承(docs:STI),因此如果你不是,你就不能在AR模型中使用它处理STI结构。

在这种情况下,您有两个选择:

1)将列重命名为:transaction_type,kind,...

2)禁用此模型的STI:

class Transaction < ActiveRecord::Base
  self.inheritance_column = nil
end

答案 1 :(得分:0)

  

无效的单表继承类型:cars不是Transaction

的子类

Rails试图在我们使用的时候找到Car作为类Transaction的子类:在STI中键入column