如何删除has_many:通过关联加方法授权

时间:2016-04-05 04:59:57

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我有一个应用程序,用户可以创建组(cliqs)供其他人加入。一个用户拥有该组;其他用户请求加入该组。这通过两个has_many:通过关联(请求/成员资格)来工作。就组创建和请求而言,一切似乎都很好。但是,我遇到了一个有趣的问题,我的会员资格破坏控制器行动。

  • 我需要拥有者才能删除群组中的任何成员
  • 我需要一名普通会员才能删除任何其他群组成员
  • 我需要当前用户才能从群组中删除自己
  • 所有者无法删除自己的会员资格;只有小组

额外信息:我有一个单独的控制器操作,用于删除整个组并且它有效。我将使用验证/条件渲染,仅允许所有者删除该组。

我应该如何在控制器中完成这些特定的规定?如何在视图中向特定用户显示特定选项?

以下是我的模型:(简洁起见)

用户:

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

Cliqs(组):

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

这是我的控制器动作:

def destroy
    @cliq_membership = current_user.cliq_memberships.find(params[:id])
    @cliq = @cliq_membership.cliq

    @cliq_membership.destroy
       flash[:notice] = "You left the Cliq."
    redirect_to cliqs_path
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>

0 个答案:

没有答案