我正在尝试添加轻松添加和删除“群组”中“玩家”的能力
群组是has_and belongs_to_many玩家的模型。它实际上只是一个名字,上面有一组玩家,还有一个user_id来确定它是哪个组。
在群组控制器中有以下内容
def remove_player(player)
@group = current_user.groups.find params[:id]
@group.players.delete(player)
redirect_to @group
end
在视图中有以下内容
- @group.players.each do |player|
%tr
%td
= player.name
%td
= link_to 'Delete', remove_player_group_path(player.id), :class => 'btn btn-mini btn-danger'
在路线中有以下内容
resources :groups do
member do
post 'add_player'
post 'remove_player'
end
但是我得到一个nil id路由错误。 我相信这应该是非常简单的,任何想法。只是希望能够从一个组中删除一个玩家。
还尝试了:
= link_to 'Delete', :controller => "group", :action => "remove_player", :class => 'btn btn-mini btn-danger'
这给了我一个路由错误......
答案 0 :(得分:0)
首先,它看起来有语法错误。
此:
current_user.groups.find params[:id]
应该是:
current_user.groups.find(params[:id])
其次,路径不应该是:
group_remove_player_path(player.id)
答案 1 :(得分:0)
我建议不要使用has_and_belongs_to_many,而是使用完全成熟的连接表模型。例如
class Group
has_many :group_players
has_many :players, :through => :group_players
class GroupPlayer
belongs_to :group
belongs_to :player
class Player
has_many :group_players
has_many :groups, :through => :group_players
现在,如果要从组中删除播放器,则删除相应的group_player记录。如果您为player_groups提供标准时间戳字段,这还可以跟踪玩家加入群组的时间。
说了这么多,你的问题可能只是你说的
link_to 'Delete', :controller => "group", :action => "remove_player", :class => 'btn btn-mini btn-danger'
它应该是
link_to 'Delete', :controller => "groups", :action => "remove_player", :class => 'btn btn-mini btn-danger'
假设您有groups_controller.rb,而不是group_controller.rb。但是,无论如何最好使用命名路线,正如@JellyFishBoy建议的那样。