Rails: 如何在关联上设置自定义键
Rails: How to set custom key on association
我有两个模型:ActivityFeed (:id, :activity_id,...)
和 ActivityTour (:activity_id, :tour_id)
。
class ActivityFeed < ApplicationRecord
has_many :activity_tours, foreign_key: :activity_id
end
class ActivityTour < ApplicationRecord
belongs_to :activity_feed, foreign_key: :activity_id
end
我创建了两条记录,例如:a = ActivityFeed.create(activity_id: 123,..)
和 b = ActivityTour.create(activity_id: 123,..)
。
我预计 b.activity_feed
会 return a
但它 return 会 nil
。
这是查询 SELECT "activity_feeds".* FROM "activity_feeds" WHERE "activity_feeds"."id" = LIMIT [["id", 123], ["LIMIT", 1]]
。
请告诉我需要什么来解决这个问题。我将不胜感激
请尝试创建如下关联:
class ActivityFeed < ApplicationRecord
has_many :activity_tours, foreign_key: :activity_id, primary_key: :activity_id
end
class ActivityTour < ApplicationRecord
belongs_to :activity_feed, foreign_key: :activity_id, primary_key: :activity_id
end
active record设置为foreign_key
时区分ActivityFeed
中的activity_id
和ActivityTour
是模糊的。所以,把ActivityTour
结构改成ActivityTour (:activity_feed_id, :tour_id)
比较合适。然后定义关联如下:
class ActivityFeed < ApplicationRecord
has_many :activity_tours, foreign_key: :activity_feed_id
end
class ActivityTour < ApplicationRecord
belongs_to :activity_feed, foreign_key: :activity_feed_id
end
我有两个模型:ActivityFeed (:id, :activity_id,...)
和 ActivityTour (:activity_id, :tour_id)
。
class ActivityFeed < ApplicationRecord
has_many :activity_tours, foreign_key: :activity_id
end
class ActivityTour < ApplicationRecord
belongs_to :activity_feed, foreign_key: :activity_id
end
我创建了两条记录,例如:a = ActivityFeed.create(activity_id: 123,..)
和 b = ActivityTour.create(activity_id: 123,..)
。
我预计 b.activity_feed
会 return a
但它 return 会 nil
。
这是查询 SELECT "activity_feeds".* FROM "activity_feeds" WHERE "activity_feeds"."id" = LIMIT [["id", 123], ["LIMIT", 1]]
。
请告诉我需要什么来解决这个问题。我将不胜感激
请尝试创建如下关联:
class ActivityFeed < ApplicationRecord
has_many :activity_tours, foreign_key: :activity_id, primary_key: :activity_id
end
class ActivityTour < ApplicationRecord
belongs_to :activity_feed, foreign_key: :activity_id, primary_key: :activity_id
end
active record设置为foreign_key
时区分ActivityFeed
中的activity_id
和ActivityTour
是模糊的。所以,把ActivityTour
结构改成ActivityTour (:activity_feed_id, :tour_id)
比较合适。然后定义关联如下:
class ActivityFeed < ApplicationRecord
has_many :activity_tours, foreign_key: :activity_feed_id
end
class ActivityTour < ApplicationRecord
belongs_to :activity_feed, foreign_key: :activity_feed_id
end