我的应用程序中有许多可以正常运行的多对多关系,但是我很难添加这个新关系(user_airports
和home_airports
)!
我正在尝试给User
一个home_airports
数组,其中一个User
有很多home_airports
,而一个Airport
有很多{{1} }(从概念上讲,机场“属于”许多用户,但在技术上当然是Users
)。我创建并迁移了联接表,并将所有相关的宏添加到模型中。这是代码:
has_many
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
devise :omniauthable, omniauth_providers: %i[facebook]
has_many :vacations
has_many :user_airports, dependent: :destroy
has_many :home_airports, through: :user_airports, source: :airport
end
class UserAirport < ApplicationRecord
belongs_to :user
belongs_to :airport
end
class Airport < ApplicationRecord
has_many :deal_origins
has_many :origin_deals, through: :deal_origins, source: :deal
has_many :deal_destinations
has_many :destination_deals, through: :deal_destinations, source: :deal
has_many :user_airports
has_many :users, through: :user_airports
end
# from my schema.rb
create_table "user_airports", force: :cascade do |t|
t.integer "user_id"
t.integer "airport_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
中的vacations
关系可以很好地工作(仅作为工作示例)。
User
中的users
关系实际上也可以正常工作。但是它不是相反的:对于Airports
,当我调用User
或更重要的是user.user_airports
时,我得到一个user.home_airports
NoMethodError
我在上方显示了user.home_airports << Airport.first
NoMethodError: undefined method `home_airports' for #<User:0x00007fa7bfc9f630>
中的deal_origins
和deal_destinations
关系,因为它们是有效的多对多关系,并且似乎与{ {1}}关系。 (我没有显示我的Airport
模型,但是如果有帮助的话我可以)
我能想象到的唯一不同是User
是Deal
模型。
这是怎么了?
编辑: 为了响应注释中的建议,我停止了服务器,退出了控制台,重新启动了服务器,然后重新启动了控制台。仍然遇到相同的问题:
User
如果您想查看其他代码,请告诉我,并告诉我您需要什么。谢谢!