在 rails 迁移中,您使用 Uniq 的哪一方面

What side do you use Uniq in rails migration

在我的 rails 应用程序中,我有 2 个模型 ProfileSkill

Profile has_and_belongs_to_many Skill 并且只能有一次相同的 Skill.

Skillhas_and_belongs_to_manyProfile。如果我们尊重第一个关系,那么它不应该有超过一次相同的 Profile.

当我创建连接时 table 我有两种可能性:

rails g migration CreateProfilesSkillsJoinTable profiles:uniq skills

rails g migration CreateProfilesSkillsJoinTable profiles skills:uniq

第一个选项会生成

class CreateProfilesSkillsJoinTable < ActiveRecord::Migration[5.1]
  def change
    create_join_table :profiles, :skills do |t|
      t.index [:profile_id, :skill_id], unique: true
      # t.index [:skill_id, :profile_id]
    end
  end
end

第二个会生成

class CreateProfilesSkillsJoinTable < ActiveRecord::Migration[5.1]
  def change
    create_join_table :profiles, :skills do |t|
      # t.index [:profile_id, :skill_id]
      t.index [:skill_id, :profile_id], unique: true
    end
  end
end

您想使索引唯一:

add_index :something, [:profile_id, :skill_id], unique: true

第一条规则已验证(您只能获得1:2一次)。请注意,即使使用 habtm,您也倾向于以相同的方式创建关系 (profile.skills << skill),您只需要确保 skill.profiles << profile 不会创建不需要的关系