Equipos de aplicación de rieles de usuarios.
Necesito crear equipos de usuarios. Un usuario pertenece a un equipo (solo un equipo) un equipo tiene muchos usuarios. No puedo descubrir cómo hacer que un usuario pueda crear, unirse y dejar un equipo. A continuación se muestra lo que tengo hasta ahora, pero estoy seguro de que estoy haciendo algo terriblemente mal (y "newby").
Modelo de usuario:
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 equipo
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 de relación de equipo
attr_accessible :team_id
belongs_to :team
belongs_to :user
validates :team_id, presence: true
rutas:
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 %>
Si no puedes decir que estaba tratando de adaptar algo de lo que está en el tutorial de Hartl para este propósito. ¿Qué estoy haciendo mal?
Creo que me he dado cuenta de los modelos, pero ahora no estoy seguro de cómo hacer que un usuario cree un equipo, destruya un equipo, se una a un equipo o abandone un equipo. ¿Qué tengo que hacer en los modelos, controladores y vistas para que esto suceda?