1

ユーザーのチームを作成する必要があります。ユーザーはチーム(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のチュートリアルにあるもののいくつかを適応させようとしていました。私は何が間違っているのですか?

モデルを理解できたと思いますが、ユーザーにチームを作成する方法、チームを破棄する方法、チームに参加する方法、またはチームを離れる方法がわかりません。それを実現するには、モデル、コントローラー、およびビューで何をする必要がありますか?

4

3 に答える 3

2

私はそれを考え出した。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:02:26.040 に答える
0

これがあなたの問題かどうかはわかりませんが

belongs_to :teams

する必要があります

belongs_to :team

に属するのは常に単数です。

編集:あなたは多対多の関係を築こうとしているようです。これを試して:

class User
  has_many :team_relationships, dependent: :destroy
  has_many :teams, through: :team_relationships
end

class Team
  has_many :team_relationships, dependent: :destroy
  has_many :users, through: :team_relationships
end

class TeamRelationship
  belongs_to :user
  belongs_to :team
end

私はそれがそれをするべきだと思います。

于 2012-08-26T22:21:54.723 に答える
0

has_manyリレーションシップが1つしかない場合は、必要ありません。through ユーザーbelongs_toのみのoneチームとチームにはmanyユーザーがいるため、has_many->belongs_toリレーションシップがあります。

ユーザーモデル:

belongs_to :team

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!
  return if team_member?
  team.destroy
end

チームモデル

has_many :users

attr_accessible :team_name, :team_id

validates :team_name, presence: true, length: { maximum: 140 }

default_scope order: 'teams.created_at DESC'

TeamRelationshipモデル#NOTNEEDED

_join_team.html.erb

<%= button_to "Join", join_teams_path(current_user.team_build(team_id: @team_id),  class: "btn btn-large btn-primary", remote: true %>

_unjoin_team.html.erb

<%= button_to "Leave Team", leave_teams_path(current_user.team) , class: "btn btn-large btn-primary" , remote: true  %>

team_controllor

 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 leave
  if current_user.unjoin!
     redirect_to @user #NOTE dont use redirect when you perform actions with ajax.
   else
     #render some error
   end
end

私はあなたにそれらが明確に定義されているレールからいくつかのドキュメントを通過することをお勧めします

http://guides.rubyonrails.org/ajax_on_rails.html

http://railscasts.com/episodes/205-unobtrusive-javascript

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html

http://guides.rubyonrails.org/association_basics.html

于 2012-08-26T22:33:07.107 に答える