0

現在、2つのテーブルを取得しています。

Users (with a foreign_key : team_id) 
Teams

関係:1対多(ユーザーは1つのチームしか持てませんが、チームカーには多くのユーザーがいます)

Users :   belongs_to :teams
Teams:     has_many :users

class Team < ActiveRecord::Base
    has_many :users

class User < ActiveRecord::Base
  belongs_to :teams

config / routers.rb

  get "users/new"
  resources :users
  resources teams do
    member do
      get 'join'
      get 'leave'
    end
  end
 resources :sessions, only: [:new, :create, :destroy]
   match '/signin',  to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete

  match '/users', to: 'users#index'

  match '/teams', to: 'teams#index'
end

myapp/teams/1そして、チームページ(例)に、ユーザー(電話をかけるcurrent_user)がこのチームに参加または退会できるボタンを作成しようとしています。

チームに参加するには、列を更新し、user.team_idこれにチームのIDを入力する必要があります(チームを離れるには、列user.team_idを空にする必要があります)。

誰かがこれらの2つのボタンを作るアイデアを持っていますか?

4

1 に答える 1

2

チームコントローラーには2つのアクションが必要です。

def join
  @team = Team.find params[:id]
  current_user.update_attribute(:team_id, @team.id)
  redirect_to @team
end

def leave
  @team = Team.find params[:id]
  current_user.update_attribute(:team_id, nil)
  redirect_to @team
end

ルートで

resources :teams do
  member do
    get 'join'
    get 'leave'
  end
end

ショービューのリンク

<%= link_to 'join', join_team_path(@team) %>
<%= link_to 'leave', leave_team_path(@team) %>

アップデート

このコードはresources :teams、ルートとチームコントローラーがそれぞれすでに存在することを前提としていることに注意してください。そうでない場合は、いくつかの変更が必要になります。

アップデート

sign_in current_userdeviseを使用する場合にも必要です

于 2012-07-31T09:04:43.297 に答える