Ruby on rails 的NoMethodError有许多:虽然(未定义的方法类名称为nil:NilClass)
最近,当我调用Ruby on rails 的NoMethodError有许多:虽然(未定义的方法类名称为nil:NilClass),ruby-on-rails,activerecord,Ruby On Rails,Activerecord,最近,当我调用organization.subscriptions NoMethodError at /organizations/1 undefined method `class_name' for nil:NilClass Did you mean? class_eval 看起来类名称是在不存在的东西上调用的。但既然有交易和订阅,这就不应该发生。我一直在看我的代码,但我看不出错误。有人能帮忙吗 # organization.rb class Organization < Appl
organization.subscriptions
NoMethodError at /organizations/1
undefined method `class_name' for nil:NilClass
Did you mean? class_eval
看起来类名称是在不存在的东西上调用的。但既然有交易和订阅,这就不应该发生。我一直在看我的代码,但我看不出错误。有人能帮忙吗
# 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
非常感谢你们的帮助,伙计们 这是一个盲目的尝试,但我认为Rails在您的
中假设了一个不同的类名,有许多关联
#在本例中,Rails采用类名:“Subscription”
有很多:订阅
#在本例中,Rails还采用类名:“Subscription”
有很多:订阅,通过::交易
#但在本例中,我认为Rails假定类名称为:“InitializedSubscription”
拥有多个:订阅、通过::交易、源::已初始化的订阅
也许试试这个
有很多:订阅,通过::交易,
源::已初始化订阅,
类名:“订阅”
谢谢您的快速回答。虽然Rails从关联名称推断类名,但是subscriptions
变为Subscription
source
不应该对class\u name
产生影响。不过,您对class\u name
的提示将我推向了正确的方向。我有另一个有很多:通过订阅
模型中声明的关联。显然,Rails无法从那里的:deals
推断Deal
。不知道为什么。
organizations
+----+----------+
| id | name |
+----+----------+
| 1 | Org name |
+----+----------+
deals
+----+------------+-----------------+
| id | name | organization_id |
+----+------------+-----------------+
| 1 | First Deal | 1 |
+----+------------+-----------------+
subscriptions
+----+-----------------+
| id | initial_deal_id |
+----+-----------------+
| 1 | 1 |
+----+-----------------+