关联名称与Active Record中的方法冲突

时间:2016-01-28 18:29:49

标签: ruby-on-rails ruby activerecord associations

您好我是rails的初学者,并设置了具有各种关联的数据库/模型。

我希望我的transactions控制器将transactions记录和相应的subtransactions记录(即事务中每个子事务(例如产品)的一行)保存到数据库中。

创建新表subtransactions(与transactions相关联)后,我遇到以下异常:

在TransactionsController中创建

ArgumentError

You tried to define an association named transaction on the model Subtransaction, 
but this will conflict with a method transaction already defined
by Active Record. Please choose a different association name.

我对这告诉我的内容有点困惑,或者更具体地说是在哪里寻找错误。不知道如何找出我的关联与之相冲突的方法。

2 个答案:

答案 0 :(得分:3)

正如错误消息所示,问题在于您的事务关联:在活动记录对象上已有一个名为transaction的实例方法。

创建名为transaction的关联也会创建一个同名的读取器方法,该方法将隐藏预先存在的方法。在过去,当某些内部的rails试图调用一个方法并最终调用你的关联阅读器方法时,这会导致真正模糊的错误,因此rails会阻止你这样做。

此外,您无法创建名为transaction的新方法,因为ActiveRecord::Base.transaction是一种保留方法。

http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

答案 1 :(得分:0)

您的问题是因为product_orders表的模型名称错误

默认名称应为

 ProductOrder