私はこれをもう一度投稿しましたが、それでも機能せず、3時間試しても理由がわかりません。私はこれらすべてに不慣れであり、これは私にとってかなり複雑です。私はこれについていくつかの助けを本当に感謝します。ありがとう!
ユーザーのチームを作成する必要があります。ユーザーbelongs_to
チーム、チームhas_many
ユーザー。
ユーザーは、チームを作成し、既存のチームに参加し、現在のチームの参加を解除できる必要があります(チームを作成する人を作成し、チームリーダーにする方法を教えていただければ!)
データベーステーブルを次のように設定しています。
- ユーザーテーブル:
id, name, email, timestamps, team_id
- チームテーブル:
id, team_name, timestamps, user_id
私が取得しているエラー:
undefined method `team_build' for #<User:0x3a14a80>
1: <%= button_to "Join", join_teams_path(current_user.team.build(team_id: @team_id)), class: "btn btn-large btn-primary" %>
ユーザーモデル:
class User < ActiveRecord::Base
attr_accessible :company, :name, :email, :password, :password_confirmation, :image
belongs_to :team, dependent: :destroy
validates :user_id, presence: true
def team_member?
team.present?
end
def join!(team)
return false if team_member?
team.create!(team_id: team.id)
end
def unjoin!(team)
return if team_member?
team.destroy
end
チームモデル:
class Team < ActiveRecord::Base
has_many :users
attr_accessible :team_name
before_save { |team| team.team_name = team_name.downcase }
validates :team_name,
presence: true,
length: { maximum: 140 },
uniqueness: { case_sensitive: false }
default_scope order: 'teams.created_at DESC'
end
チームコントローラー:
class TeamsController < ApplicationController
before_filter :signed_in_user
def join
@team = Team.find params[:id]
if current_user.join!(@team.id)
redirect_to @user #NOTE dont use redirect when you perform actions with ajax.
else
#render some error
end
end
def show
@team = Team.find(params[:id])
end
def leave
if current_user.unjoin!
redirect_to @user #NOTE dont use redirect when you perform actions with ajax.
else
#render some error
end
end
def new
@team = Team.new
end
def create
@team = Team.new(params[:team])
if @team.save
flash[:success] = "Team Created!"
redirect_to @team
else
render 'new'
end
end
def teams
@title = "Teams"
@team = Teams.find(params[:id])
render 'show_teams'
end
def index
Team.all
end
参加ボタン:
<%= button_to "Join", join_teams_path(current_user.team.build(team_id: @team_id)), class: "btn btn-large btn-primary" %>
参加解除ボタン:
<%= button_to "Leave Team", leave_teams_path(current_user.team) , class: "btn btn-large btn-primary" , remote: true %>
ルート:
resources :teams
match '/teams', to: 'teams#index'
match '/new_team', to: 'teams#new'