ユーザーのチームを作成する必要があります。ユーザーはチーム(1つのチームのみ)に属しており、チームには多くのユーザーがいます。ユーザーがチームを作成、参加、および退会できるようにする方法がわかりません。以下は私がこれまでに持っているものですが、私はひどく何かをしていると確信しています(そして「新しく」間違っています)。
ユーザーモデル:
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_relationshipモデル
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
team_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のチュートリアルにあるもののいくつかを適応させようとしていました。私は何が間違っているのですか?
モデルを理解できたと思いますが、ユーザーにチームを作成する方法、チームを破棄する方法、チームに参加する方法、またはチームを離れる方法がわかりません。それを実現するには、モデル、コントローラー、およびビューで何をする必要がありますか?