最近,当我调用 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/