Equipes de usuários administram o app
Eu preciso criar equipes de usuários. Um usuário pertence a uma equipe (apenas uma equipe) e uma equipe possui muitos usuários. Não consigo descobrir como fazer com que um usuário possa criar, participar e sair de um time. Abaixo está o que eu tenho até agora, mas tenho certeza que estou fazendo algo terrivelmente (e "newby" errado).
Modelo do Usuário:
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
modelo de equipe
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'
modelo team_relationship
attr_accessible :team_id
belongs_to :team
belongs_to :user
validates :team_id, presence: true
rotas:
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 %>
Se você não pode dizer que eu estava tentando adaptar um pouco do que está no tutorial de Hartl para esse propósito. O que estou fazendo de errado?
Acredito ter descoberto os modelos, mas agora não sei como fazer com que um usuário crie uma equipe, destrua um time, participe de um time ou saia de um time. O que preciso fazer nos modelos, controladores e visualizações para que isso aconteça?