Sql 我可以用现有数据在两个现有的RubyonRails模型之间创建关系吗?

Sql 我可以用现有数据在两个现有的RubyonRails模型之间创建关系吗?,sql,ruby-on-rails,relationship,jointable,Sql,Ruby On Rails,Relationship,Jointable,我有两个模型,在一个实时应用程序中有现有的数据,它们之间目前没有任何关系。它们主要用于存储和快速查找,但现在我们看到有必要加入它们: # == Schema Information # # Table name: subscriptions # # id :integer not null, primary key # app_id :string(255) # user_id :string(255

我有两个模型,在一个实时应用程序中有现有的数据,它们之间目前没有任何关系。它们主要用于存储和快速查找,但现在我们看到有必要加入它们:

# == Schema Information
#
# Table name: subscriptions
#
#  id                :integer          not null, primary key
#  app_id            :string(255)
#  user_id           :string(255)
#  effective_date    :datetime
#  expiration_date   :datetime
#  last_validated    :datetime
#  created_at        :datetime         not null
#  updated_at        :datetime         not null
#  active            :boolean
#  subscription_type :string(255)
#

class Subscription < ActiveRecord::Base
end
订阅和apns令牌模型中的用户id都是唯一的

1) 是否可以创建has_one belish_to关系,以及如何在apns_令牌模型中填充新的外键“subscription_id”

2) 这里的快速修复方法是什么?我如何在rails中编写sql语句以加入用户id

编辑:快速修复工作,但必须有一个更好的方式在一个查询

subscribed_users = Subscription.where("active = ? and app_id = ?", true, app.app_id).collect { |u| u.user_id }
apns_tokens = ApnsTokens.where(user_id: subscribed_users).collect { |t| t.apns_token }

谢谢

如果我理解了这个问题,那么您有两个模型共享一个值(本例中为user_id),您希望在它们之间创建一种关系

也许您可以在
has_one
关系中使用主键和外键参数,这样您就可以使用
id
relationship_id
以外的其他列:

遵循API文档,您可以编写

class Subscription

  has_one :apns_token, primary_key: :user_id, foreign_key: :user_id

end

class ApnsToken

  has_one :subscription, primary_key: :user_id, foreign_key: :user_id

end
我想到的另一个解决方案是使用中间关系

由于您有
user\u id
列,我猜您在Subscription和ApnsToken类中有一个
归属关系

如果用户类中有
有一个
关系,则可以使用
有一个
关系中的
通过
参数来表示您通过用户关系拥有订阅/apns\u令牌

class User

  has_one :apns_token
  has_one :subscription

end

class Subscription

  belongs_to :user
  has_one :apns_token, through: :user

end

class ApnsToken

  belongs_to :user
  has_one :subscription, through: :user

end

我没有为此示例测试此代码,但这两种解决方案都可能有效:)

subscription.user.apns\u token
apns\u token.user.subscription
应该有效,无需嵌套这些模型。
class Subscription

  has_one :apns_token, primary_key: :user_id, foreign_key: :user_id

end

class ApnsToken

  has_one :subscription, primary_key: :user_id, foreign_key: :user_id

end
class User

  has_one :apns_token
  has_one :subscription

end

class Subscription

  belongs_to :user
  has_one :apns_token, through: :user

end

class ApnsToken

  belongs_to :user
  has_one :subscription, through: :user

end