【发布时间】:2016-04-05 22:50:11
【问题描述】:
我有一组用户。用户创建一个组并且是所有者。他们可以接受/拒绝请求(可以正常工作),创建组(也可以),并且我希望他们能够删除组成员(这不起作用)。出于某种原因,组的所有者就是可以从组中删除的所有人。
如何设置控制器操作/视图以让所有者删除组成员?
附:我不想为此使用授权系统。只需在控制器中完成就应该足够简单。我只需要能够删除任何组成员。 Groups = Cliqs。我没有将成员资格设置为组的嵌套资源。
错误:找不到 'id'=2 的 CliqMembership [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'
【问题讨论】:
-
当它失败时,是否有错误记录在任何地方?消息是什么?如果不确定,请尝试将
destroy更改为destroy! -
我将更新问题以包含错误消息。
-
谢谢,您是否还可以从您的
log/development.log文件中添加包含 DELETE 请求的位。 -
我为请求添加了日志文件。我还编辑了我的问题,以反映我所做的似乎部分有效的更改。它只允许我删除第一个创建的 Cliq(因为 find_by 方法的工作方式),但不允许我删除“选定的”Cliq 的成员关联。我试过 find_by_id 和 find_by(id: params[:cliq_id]),但无济于事。我该如何解决这个问题?
-
刚刚解决了。检查答案。
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord