代码之家  ›  专栏  ›  技术社区  ›  Daniel Costa

您在rails迁移中使用Uniq的哪一边

  •  0
  • Daniel Costa  · 技术社区  · 7 年前

    在我的rails应用程序中,我有2个型号 Profile Skill

    轮廓 has\u和\u beliens\u to\u many 技巧 只能有一次相同的 技巧

    技巧 has\u和\u beliens\u to\u many 轮廓 。如果我们尊重第一个关系,那么它不应该有超过一次相同的关系 轮廓

    创建联接表时,有两种可能:

    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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Ben    7 年前

    要使索引唯一:

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

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