如何使用唯一键作为外键

时间:2014-10-23 01:30:15

标签: ruby ruby-on-rails-4 rails-migrations

我在2个表userstitles之间存在N:N关系。这些表使用第三个表purchases进行链接,该表应该具有每个其他表的id。问题是对于titles我不需要title_id表上的purchases,而是名为item_id的{​​{1}}和UNIQUE的不同列1 {}在NOT NULL表上。

目前我有以下迁移,但它无效。我可能会遗漏一些东西:

titles

如何使用class CreatePurchases < ActiveRecord::Migration def change create_table :purchases, :id => false do |t| t.belongs_to :title, foreign_key: 'item_id' t.belongs_to :user, :null => false end end end 表上的purchases键而不是titles让我的item_id表引用titles表?

1 个答案:

答案 0 :(得分:1)

迁移:

class CreatePurchases < ActiveRecord::Migration
  def change
    create_table :purchases, :id => false do |t|
      t.integer :item_id
      t.integer :user_id, :null => false
    end
  end
end

在你的模特中:

# app/models/title.rb
class Title < ActiveRecord::Base
  # ...
  has_and_belongs_to_many :users,
    class_name: "User",
    foreign_key: "item_id",
    association_foreign_key: "user_id",
    join_table: "purchases"
  # ...
end

# app/models/user.rb
class User < ActiveRecord::Base
  # ...
  has_and_belongs_to_many :titles,
    class_name: "Title",
    foreign_key: "user_id",
    association_foreign_key: "item_id",
    join_table: "purchases"
  # ...
end

如果需要,请不要忘记为迁移添加索引。