У меня есть таблица пользователей и команд.В таблице пользователей есть столбец с именем team_id.Но теперь цель состоит в том, чтобы позволить пользователям иметь несколько команд.
Итак, я создал таблицу user_teams, используя такие миграции:
class CreateUserteams < ActiveRecord::Migration[5.0]
def change
create_table :user_teams do |t|
t.integer :user_id
t.integer :team_id
t.timestamps
end
end
end
И мой код выглядит следующим образом:
models / user.rb
class User < ApplicationRecord
#belongs_to :team
# should now have multiple teams
has_many :user_teams
has_many :teams, through: :user_teams
models / team.rb
class Team < ApplicationRecord
has_many :members, foreign_key: "team_id", class_name: "User"
has_many :user_teams
has_many :users, through: :user_teams
models / user_teams.rb(новый файл)
class UserTeam < ApplicationRecord
belongs_to :user
belongs_to :team
end
(Это нормально работает) Чтобы пригласить пользователя присоединиться к команде, я отправляю ему приглашение, и, если он его принимает, я добавляю его в новую таблицу users_team с помощью:
controllers / team_invites_controller.br
def accept
user = @team_invite.user
@team_invite.update(status: TeamInvite.statuses[:accepted])
user.team_id = @team_invite.team_id
user.company_id = @team_invite.team.company_id
user.teams << Team.find(user.team_id)
user.save(:validate => false)
respond_to do |format|
if user.shadow?
format.html {
redirect_to new_user_registration_path({
:email => user.email,
:role => user.main_role,
})
}
else
format.html { redirect_to dashboard_root_path, notice: 'Invite accepted' }
end
format.json { head :no_content }
end
end
Проблема в том, что теперь «пользователь» каким-то образом стал командой, а не пользователем, и он сломал весь код, используя"user.something".Также из-за этого я не могу получить доступ к методам пользователя, потому что «пользователь» больше не пользователь, а команда.
Например, сейчас:
<% if user.photo.exists? %>
дает:
неопределенный метод `photo 'для команды: 0x00007f381dea4708
Или:
<% if current_user.teams.members.count > 1 %>
дает:
неопределенный метод` members' для команды:: ActiveRecord_Associations_CollectionProxy: 0x00007f3845954eb0 Вы имели в виду?участник?
Почему users.something теперь ведет себя как команда?Я уже сделал повторные миграции и получил ту же ошибку.Есть идеи, как это произошло и как это исправить?Как правильно получить доступ к свойствам и методам пользователей?Спасибо
РЕДАКТИРОВАТЬ Вкл.
<% if user.photo.exists? %>
он предназначен для отображения изображения другого пользователя и выдает неопределенную ошибку метода "photo" метода.Но если я использую (хотя я не хочу)
<% if current_user.photo.exists? %>
Это работает.Как получилось?