Rails:如何在关联上设置自定义键

时间:2018-01-29 09:03:14

标签: ruby-on-rails foreign-keys associations

我有两个模型: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会返回a,但会返回nil

这是查询SELECT "activity_feeds".* FROM "activity_feeds" WHERE "activity_feeds"."id" = $1 LIMIT $2 [["id", 123], ["LIMIT", 1]]

请告诉我需要解决的问题。我将非常感激

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

当您将activity_id设置为ActivityFeed时,活动记录区分ActivityTourforeign_key是不明确的。因此,将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