2016-06-15 6 views
0

오케이.DB 테이블 간의 관계를 변경해야합니다.

나는 루비 1.8.7을 사용하고 있는데, 나는 후편 보석 버전 '2.6.0'을 사용하고있다.

나는 테이블라는 사용자가 있고 테이블은 사용자가 한 팀을 가질 수 있고 같은이 관계의 팀 지금

라는 것은 :

belongs_to :npt_team 

기능의 일부는 팀을 위해 업그레이드 그러나로 사용자가 여러 팀으로 나눌 수 있도록해야합니다.

  • :has_and_belongs_to_many
  • :many_to_many
  • :many_to_many_by_ids
최고의 하나입니다

:

나는 다음 중 하나로 변경할 수 있습니다 : 내가 알고 싶은 무엇

사용하고 왜 (왜 내가 알고 싶어?)

두 번째로 내가 이것을 바꿀 때 테이블의 DB는 어떻게 될 것입니까?

기타주의해야 할 사항은 무엇입니까? 나는 다음과 MySQL의 버전을 사용하고 있습니다

:

mysql을 DISTRIB 5.6.29 14.14 버전을 EditLine 를 사용 osx10.11 (x86_64에) 랩퍼

편집 :

Ooops는 다소 중요한 점을 언급하는 것을 잊어 버렸습니다.

레일을 사용하지 않고 Ramaze라는 오래된 프레임 워크를 사용하고 있습니다.

+0

표준 구현은 공동 테이블을 통해 HABTM 관계 (열'user_id'와'team_id'와'users_teams')입니다. –

답변

0

내 질문에 대한 답은 다음과 같습니다

나는이 (가) 사용자 테이블에 다음을 추가 할 필요가 관계를 만들려면 다음

has_and_belongs_to_many(:npt_teams, 
         :join_table => :users_teams, 
         :class => 'NptTeam', 
         :left_key => :user_id, 
         :right_key => :npt_team_id) 

many_to_many_by_ids :npt_teams, 'UsersTeams' 

만들기 때문에 같은 새로운 조인 테이블 :

class UsersTeams < Sequel::Model 
    clear_all 

    set_schema { 
    primary_key :id 
    integer :user_id, :null => false, :default => 0 
    integer :npt_team_id, :null => false, :default => 0 
    } 
    create_table unless table_exists? 

    belongs_to :user 
    belongs_to :npt_team 
end 

이고 조인 테이블과 함께 관계가 만들어집니다.

이것이 최선의 방법인지는 잘 모르겠지만 작동하는 것 같습니다.

두 번째 질문에 대해서는 현재 DB에있는 데이터가 영향을받지 않는 것으로 보입니다.

이제는 현재 팀을 새 테이블로 이동하면됩니다.

나는 잘 알 필요가 있을지도 모르는 것에 관해서, 당신이 알고 있기 때문에 알고있는 것을 알고있는 사람들은 반응이 없다는 것을 알고 있기 때문에 나는 단지 날개를 달아야 할 것입니다.

편집 :를 통해 데이터를 이동하는

스크립트 RoR에 대한

User.all.each do |user| 
    join = UsersTeams.create(:user_id => user.id, :npt_team_id => user.npt_team_id) 
    puts join.inspect 
    join.save 
    puts user.npt_teams.to_a.map {|t|t.inspect}.to_s 
end 
관련 문제