实施的简单功能:点击一个名为“加入此团队”的大按钮,允许当前登录的用户加入上述团队。
所以,这就是我得到的:
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请求在语法上正确相关?
提前致谢!
答案 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