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

Mat*_*ias 2 ruby activerecord ruby-on-rails associations

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

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

创建新表subtransactions(与 关联transactions)后,出现以下异常:

TransactionsController#create 中的参数错误

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.
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*ung 6

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

创建一个名为的关联transaction还会创建一个同名的读取器方法,该方法将隐藏先前存在的方法。在过去,当 Rails 的某些内部部分尝试调用一个方法并最终调用您的关联读取器方法时,这会导致非常模糊的错误,因此 Rails 会阻止您这样做。

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

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