2016-06-15 3 views
0

ОК, поэтому давайте избавим основы от пути.Необходимо изменить соотношение между таблицами БД

Я бегу рубин 1.8.7, я использую версию gem версии 2.6.0.

У меня есть таблица под названием пользователей и таблица с именем команды

Сейчас пользователь может иметь одну команду, и как таковой, это соотношение:

belongs_to :npt_team 

Однако, как часть функции обновления для команд Я должен сделать так, чтобы Пользователи могли быть отделены от нескольких команд.

То, что я хочу знать:

я могу изменить его на один из следующих способов:

  • :has_and_belongs_to_many
  • :many_to_many
  • :many_to_many_by_ids

который один является лучшим использовать и почему (потому что мне нравится знать)?

Во-вторых, что произойдет с БД в таблицах, когда я это изменил?

Любые вещи, о которых я должен опасаться/знать?

Я использую следующую версию MySQL:

MySQL Ver 14,14 DISTRIB 5.6.29, для osx10.11 (x86_64) с использованием EditLine обертку

EDIT:

Оуп забыл упомянуть довольно уместный вопрос.

Я не пользуюсь рельсами, я использую старую рамочную работу под названием Ramaze.

+0

Стандартной реализации для RoR является HABTM отношение путем совместной таблицы ('users_teams' с колоннами' 'user_id' и team_id'). –

ответ

0

Ответ на мой вопрос:

создать отношения, мне нужно добавить следующее в таблицу Users:

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 

и связь создается вместе с таблицей соединений.

Я не знаю, если это лучший способ сделать это, но он, похоже, работает.

Что касается второго вопроса, я не знаю, данные, находящиеся в настоящее время в БД, кажется, не затронуты.

Теперь мне просто нужно переместить текущую команду в новую таблицу, и это должно быть так.

Что касается того, что еще мне нужно знать, я не знаю, потому что вы знаете, те, кто знает, знали, что не ответили, поэтому мне просто нужно будет его крыло.

EDIT:

скрипт для перемещения данных через:

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