Команды пользователей rails app
Мне нужно создавать команды пользователей. Пользователь принадлежит команде (только одна команда), в команде много пользователей. Я не могу понять, как заставить пользователя создавать, присоединяться и покидать команду. Ниже приведено то, что я имею до сих пор, но я уверен, что я делаю что-то ужасно (и "newby" неправильно).
Модель пользователя:
belongs_to :teams, dependent: :destroy
def team_member?(team)
team_relationships.find_by_team_id(team.id)
end
def join!(team)
team_relationships.create!(team_id: team.id)
end
def unjoin!(team)
team_relationships.find_by_team_id(team.id).destroy
end
модель команды
has_many :users, through: :team_relationships, dependent: :destroy
attr_accessible :team_name, :team_id
validates :user_id, presence: true
validates :team_name, presence: true, length: { maximum: 140 }
default_scope order: 'teams.created_at DESC'
модель team_relationhip
attr_accessible :team_id
belongs_to :team
belongs_to :user
validates :team_id, presence: true
маршруты:
resources :teams do
member do
get 'join'
get 'leave'
end
end
teams_controller:
def join
@team = Team.find params[:team_id]
current_user.update_attribute(:team_id, @team.id)
redirect_to @user
end
def leave
@team = Team.find params[:id]
current_user.update_attribute(:team_id, nil)
redirect_to @user
end
_join_team.html.erb
<%= form_for(current_user.team_relationships.build(team_id: @team_id),
remote: true) do |f| %>
<div><%= f.hidden_field :team_id %></div>
<%= f.submit "Join", class: "btn btn-large btn-primary" %>
<% end %>
_unjoin_team.html.erb
<%= form_for(current_user.team_relationships.find_by_team_id(@team_id),
html: { method: :delete }) do |f| %>
<%= f.submit "Leave Team", class: "btn btn-large" %>
<% end %>
Если вы не можете сказать, что я пытался адаптировать для этой цели кое-что из учебного руководства Hartl. Что я делаю неправильно?
Я полагаю, что я понял модели, но теперь я не уверен, как заставить пользователя создать команду, уничтожить команду, присоединиться к команде или покинуть команду. Что мне нужно сделать в моделях, контроллерах и представлениях, чтобы это произошло?