has_many,belongs_to circular

时间:2014-07-22 18:51:37

标签: ruby-on-rails ruby activerecord associations

我有一个模型ApiKey

class ApiKey < ActiveRecord::Base
  has_many :third_party_api_keys #points to other Apikeys
  belongs_to :origin_key #points to another ApiKey
end

我希望它与其他api密钥有关联。我找不到如何设置它,所以我可能正在接近这个错误。我需要连接模型吗?并做一个:through

2 个答案:

答案 0 :(得分:1)

你可以为递归关联做这样的事情:

belongs_to :origin_key, class_name: 'ApiKey'
has_many :third_party_api_keys, class_name: 'ApiKey', foreign_key: :origin_key_id

如果您需要优化您的选择,您也可以使用像closure_tree这样的宝石 使用单个选择获取元素的所有层次结构。

答案 1 :(得分:0)

有一个很好的railscasts处理您的确切问题,我建议从那里开始。

另外,请查看回答您自己的other stackoverflow问题。

还有docs描述了如何进行自我加入。

要解决您的问题,您需要执行类似

的操作
class ApiKey < ActiveRecord::Base
  has_many :third_party_api_keys, class_name: 'Keys', foreign_key: :origin_key_id
  belongs_to :origin_key, class_name: 'Keys'
end

因为这是一个自引用连接,所以您不需要另一个连接表,只需要ApiKey表中的origin_key_id。