如何处理视图中 HABTM 关联的 Delete link?
How to handle Delete link for HABTM association in views?
我遇到了一个简单的问题,但已经苦苦挣扎了好几个小时。我的 rails 应用程序中有这两个模型:
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
end
和
class Group < ActiveRecord::Base
has_and_belongs_to_many :users
end
和这个控制器:
class GroupsController < ApplicationController
def show
@group = Group.find(params[:id])
@users = @group.users
end
我需要显示一个视图,显示一个特定组及其相关用户,每个用户旁边是一个 link,用于在点击删除按钮时将用户从关联中删除。我当前的 views/groups/show 版本如下所示:
<p>Description: <%= @group.description if @group.description %></p>
<p>Associated Users:
<ul>
<% @users.each do |user| %>
<li>
<%= link_to user.email %>
<%= link_to user.name %>
<button>
<%= link_to("Remove user from group", @group.users.delete(user),
:data => { :confirm => "Are you sure?" }) unless user == current_user %>
</button>
</li>
<% end%>
</ul>
</p>
"works" 但是当我刷新页面时,执行了删除方法,并且没有点击按钮就删除了关联。我尝试使用部分方法和许多其他不同的方法,但无法弄清楚。你能帮忙吗?
在呈现页面时,您正在执行 @group.users.delete(user)
因此当页面显示时它们当然会被删除。刷新时不会发生...刷新时您只会看到上次渲染的结果。
您需要在 routes.rb 中定义一条路线,当您跟随 link_to 时将调用一个动作,然后 link_to 应指向该路线路径。
也许你的路线中有这样的东西......
resources :groups do
member do
get 'detach'
end
end
然后你的 link 看起来像...
<%= link_to("Remove user from group", detach_group_path(@group, user_id: user.id),
:data => { :confirm => "Are you sure?" }) unless user == current_user %>
最后,您可以在群组控制器中执行分离操作...
def detach
group = Group.find(params[:id])
user = User.find(params[:user_id])
group.users.delete(user)
redirect_to group_path(group)
end
我遇到了一个简单的问题,但已经苦苦挣扎了好几个小时。我的 rails 应用程序中有这两个模型:
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
end
和
class Group < ActiveRecord::Base
has_and_belongs_to_many :users
end
和这个控制器:
class GroupsController < ApplicationController
def show
@group = Group.find(params[:id])
@users = @group.users
end
我需要显示一个视图,显示一个特定组及其相关用户,每个用户旁边是一个 link,用于在点击删除按钮时将用户从关联中删除。我当前的 views/groups/show 版本如下所示:
<p>Description: <%= @group.description if @group.description %></p>
<p>Associated Users:
<ul>
<% @users.each do |user| %>
<li>
<%= link_to user.email %>
<%= link_to user.name %>
<button>
<%= link_to("Remove user from group", @group.users.delete(user),
:data => { :confirm => "Are you sure?" }) unless user == current_user %>
</button>
</li>
<% end%>
</ul>
</p>
"works" 但是当我刷新页面时,执行了删除方法,并且没有点击按钮就删除了关联。我尝试使用部分方法和许多其他不同的方法,但无法弄清楚。你能帮忙吗?
在呈现页面时,您正在执行 @group.users.delete(user)
因此当页面显示时它们当然会被删除。刷新时不会发生...刷新时您只会看到上次渲染的结果。
您需要在 routes.rb 中定义一条路线,当您跟随 link_to 时将调用一个动作,然后 link_to 应指向该路线路径。
也许你的路线中有这样的东西......
resources :groups do
member do
get 'detach'
end
end
然后你的 link 看起来像...
<%= link_to("Remove user from group", detach_group_path(@group, user_id: user.id),
:data => { :confirm => "Are you sure?" }) unless user == current_user %>
最后,您可以在群组控制器中执行分离操作...
def detach
group = Group.find(params[:id])
user = User.find(params[:user_id])
group.users.delete(user)
redirect_to group_path(group)
end