当前用户动态加入/离开团队

时间:2014-11-03 18:52:58

标签: ruby-on-rails ruby

实施的简单功能:点击一个名为“加入此团队”的大按钮,允许当前登录的用户加入上述团队。

所以,这就是我得到的:

class User < ActiveRecord::Base
#devise code  
  has_many :memberships
  has_many :teams, through: :memberships
end

class Membership < ActiveRecord::Base
 belongs_to :user
 belongs_to :team
end

class Team < ActiveRecord::Base
  has_many :memberships
  has_many :users, through: :memberships
  validates :name, uniqueness: true
end

这里的重要问题:用户可以加入多个团队是关键。在这里使用连接表是正确的方法吗?没有人,如果我错了就纠正我,用户只会被困在一个团队中,对吗?

所以,我在#show

的团队中得到了一个简单的按钮
<%= link_to '#', :class => 'jointeam', :data => {:id =>  @team.id} do %>
  <div class='ui button'>Join This Team</div>
<% end %>

现在,点击此按钮后,我希望将用户添加到此团队中。我有一些不完整的JS:

$('.jointeam').on('click', function(e){
    var id = $(this).data("id");
    e.preventDefault;
    $.ajax({
      type: "POST",
      url: "/teams/" + id,
      data: {_method:"PUT", }
    });
  });

所以,我正在考虑使用带有jQuery的方法“PUT”的POST请求。这就是我被困的地方。由于我使用了名为membership的Join表,实现此功能的正确方法是什么?我需要会员控制员吗?我可以在我的团队控制器中使用一种方法,允许current_user与相关团队相关联吗?我需要编写自定义方法吗?它如何与jQuery ajax请求在语法上正确相关?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以通过修改team中的routes.rb资源向团队添加custom RESTful action

resources :team do
  post 'join', on: :member
end

这将允许/teams/<team ID>/join

等网址

然后,您可以在join中创建TeamController方法,其基础将是:

def join
  team = Team.find(params[:id])
  membership = Membership.new(team: team, user: current_user)
  current_user.memberships << membership
end