ruby-on-rails - has_many :though (undefined method class_name for nil:NilClass) 的 NoMethodError

标签 ruby-on-rails activerecord

最近,当我调用 organization.subscriptions 上的任何方法时,我遇到了 NoMethodError

NoMethodError at /organizations/1
undefined method `class_name' for nil:NilClass
Did you mean?  class_eval

看起来 class_name 是在不存在的东西上调用的。但由于有交易和订阅,这种情况不应该发生。我一直盯着我的代码,但我看不到错误。有人可以帮忙吗?

# organization.rb
class Organization < ApplicationRecord
  has_many :deals
  has_many :subscriptions, through: :deals, source: :initialized_subscriptions
end

# deal.rb
class Deal < ApplicationRecord
  belongs_to :organization
  has_many :initialized_subscriptions, foreign_key: :initial_deal_id, class_name: 'Subscription'
end

# subscription.rb
class Subscription < ApplicationRecord
  belongs_to :initial_deal, class_name: 'Deal'
end

这是表格

organizations    
+----+----------+
| id |   name   |
+----+----------+
|  1 | Org name |
+----+----------+

deals
+----+------------+-----------------+
| id |    name    | organization_id |
+----+------------+-----------------+
|  1 | First Deal |               1 |
+----+------------+-----------------+

subscriptions
+----+-----------------+
| id | initial_deal_id |
+----+-----------------+
|  1 |               1 |
+----+-----------------+

非常感谢各位的帮助!

最佳答案

这是一个盲目的尝试,但我认为 Rails 在您的 has_many 关联中假定了不同的类名。

# In this case, Rails assumes class_name: 'Subscription'
has_many :subscriptions
# In this case, Rails also assumes class_name: 'Subscription'
has_many :subscriptions, through: :deals
# But in this case, I think Rails assumes class_name: 'InitializedSubscription'
has_many :subscriptions, through: :deals, source: :initialized_subscriptions

也许可以试试这个

has_many :subscriptions, through: :deals,
                         source: :initialized_subscriptions,
                         class_name: 'Subscription'

关于ruby-on-rails - has_many :though (undefined method class_name for nil:NilClass) 的 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58115713/

相关文章:

ruby-on-rails - Rails 3 ActiveRecord API : . 构建方法

ruby-on-rails - "undefined method ` 扫描 ' for nil:NilClass"以获取与 :inverse_of 的多态 ActiveRecord 关联

sql - Rails ActiveRecord 查找日期

ruby-on-rails - has_and_belongs_to_many 按 id 精确匹配

ruby-on-rails - 查询多条记录时如何避免ActiveRecord::RecordNotFound异常

ruby-on-rails - Rails 3 + 迁移中的设计错误 : undefined method timeoutable

ruby-on-rails - 两个数据库设置给出 PG::UndefinedTable: ERROR: relation "myTable"does not exist

php - 如何对事件记录模式静态方法进行单元测试?

ruby-on-rails - Rails simple_form 关联

javascript - 无法绑定(bind) ajax :success to form created with form_for . ...:remote => true