我有一个可以接受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"}}
我无法弄清楚为什么我有一个嵌套的"交易"用参数破坏所有东西的哈希键。
你能帮帮我吗?
答案 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