我有一组用户。用户创建组并且是所有者。他们可以接受/拒绝请求(工作正常),创建组(也可以工作),我希望他们能够删除组成员(不起作用)。出于某种原因,该组的所有者都可以从该组中删除。
如何设置控制器操作/视图以让所有者删除组成员?
P.S。我不想为此使用授权系统。它应该很简单,只需在控制器中完成。我只需要能够删除任何组成员。 群组= Cliqs。我没有将会员资格作为群组的嵌套资源。
错误:无法找到CliqMembership,其中'id'= 2 [WHERE cliq_memberships
。user_id
=?]
这是我的控制器动作:
def destroy
@cliq = Cliq.find_by(params[:cliq_id])
@cliq_membership = @cliq.cliq_memberships.find(params[:id])
@cliq_membership.destroy
redirect_to cliqs_path
end
我的模特:
class Cliq < ActiveRecord::Base
belongs_to :owner, class_name: 'User'
has_many :cliq_memberships, dependent: :destroy
has_many :members, through: :cliq_memberships, source: :user
end
class User < ActiveRecord::Base
has_one :owned_cliq, foreign_key: 'owner_id', class_name: 'Cliq', dependent: :destroy
has_many :cliq_memberships, dependent: :destroy
has_many :cliqs, through: :cliq_memberships
end
我的视图控制器操作:
def show
@cliq = Cliq.find(params[:id])
@cliq_owner = @cliq.owner
@cliq_members = @cliq.members
@pending_members = @cliq.pending_members
@cliq_requests = @cliq.cliq_requests #(find a way to show all incoming requests)
@cliq_memberships = CliqMembership.all
end
我的“实际”观点:
<div>
<% @cliq.members.each do |member| %>
<ul><%= link_to member.username, user_path(member) %></ul>
<% end %>
<% @cliq.cliq_memberships.each do |cliq_membership| %>
(<%= link_to "Delete Member", cliq_membership, :method => :delete %>)
<% end %>
</div>
日志:
Cliq Load (0.0ms) SELECT `cliqs`.* FROM `cliqs` LIMIT 1
CliqMembership Load (0.5ms) SELECT `cliq_memberships`.* FROM `cliq_memberships` WHERE `cliq_memberships`.`cliq_id` = 4 AND `cliq_memberships`.`id` = 9 LIMIT 1
Completed 404 Not Found in 18ms (ActiveRecord: 0.5ms)
ActiveRecord::RecordNotFound (Couldn't find CliqMembership with 'id'=9 [WHERE `cliq_memberships`.`cliq_id` = ?]):
app/controllers/cliq_memberships_controller.rb:44:in `destroy'
答案 0 :(得分:0)
尝试将has_many :cliq_memberships, dependent: :destroy
更改为has_many :cliq_memberships, dependent: :destroy, foreign_key: 'member_id'
答案 1 :(得分:0)
我通过检查我的请求代码(也是一个has_many:通过关联并具有类似的操作)来解决它。不知道为什么我花了这么长时间来解决它。
我将方法改为:
let sliceArray = Array(slice) // [4, 5, 6, 7]
sliceArray.startIndex // 0