在 rails 迁移中,您使用 Uniq 的哪一方面
What side do you use Uniq in rails migration
在我的 rails 应用程序中,我有 2 个模型 Profile
和 Skill
。
Profile
has_and_belongs_to_many Skill
并且只能有一次相同的 Skill
.
Skill
has_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
不会创建不需要的关系
在我的 rails 应用程序中,我有 2 个模型 Profile
和 Skill
。
Profile
has_and_belongs_to_many Skill
并且只能有一次相同的 Skill
.
Skill
has_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
不会创建不需要的关系