1

私はこれをもう一度投稿しましたが、それでも機能せず、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'
4

3 に答える 3

2
current_user.teams.build(whatever)

has_manyの関係がある場合は、これを行う方法です。ただし、belongs_toアソシエーションがある場合は、次のものが必要です。

current_user.build_team(whatever)

詳細については、 belongs_toのドキュメントを参照してください。

于 2012-09-06T00:35:56.440 に答える
1

私はそれを考え出した。buildメソッドは機能しません。チームはすでに確立されており、ユーザーはすでに確立されています。接続を確立する必要がありました。これが私が持っているものです:

チームコントローラー:

def show
  @team =  Team.find(params[:id])
  @team_members = @team.users
  @user = User.find(params[:id]) if signed_in?
end

部分的な参加ボタン:

<%= form_for(@user) do |f| %>
  <%= f.hidden_field :team_id, :value => @team.id %>
  <%= f.submit "Join Team", class: "btn btn-large btn-primary" %>
<% end %>
于 2012-09-29T15:05:49.563 に答える
1

「(チームを作成する人を作り、彼らをチームリーダーにする方法を教えていただければ、それも素晴らしいことです!)」

チームリーダーの場合、いくつかの方法でそれを行うことができます。これが簡単な方法です。

$ rails generate migration AddTeamLeaderUserIdToTeams team_leader_user_id:integer
$ rake db:migrate

これは、各チームがチームリーダーのユーザーIDを保存できるように、チームテーブルに新しい列を追加することです(注意:これは、各チームが1人のチームリーダーしか持てないことを意味します。複数のチームリーダーが必要かどうかを説明できますチームリーダー。)

そこから、新しいチームを作成するときに、次のようなことができます。

team = Team.create({:team_name => "Stanford Cardinal", :team_leader_user_id => current_user.id}). 

その後、将来的にはチームリーダーをそのように迎えることができます。

team_leader = User.find_by_id(Team.find_by_team_name("Stanford Cardinal").team_leader_user_id))

これが少し役立つことを願っています。不明な点がある場合は、遠慮なく質問してください。

于 2012-09-05T06:52:29.707 に答える