我有两类用户:"用户"和"商店"。我希望管理员成为"用户"并且能够删除商店,并且遇到了麻烦。
如果登录的用户是管理员(如下所示),我能够在shops/index.html.erb
中显示删除按钮,但是当我尝试删除商店对象时,我收到错误{{1} }
店/ index.html.erb
The action 'destroy' could not be found for ShopsController
销毁行动虽然在商店控制器中:
<% provide(:title, 'All shops') %>
<h1>All Shops</h1>
<ul class="center hero-unit col-md-6 col-md-offset-3 shops">
<% @shops.each do |shop| %>
<li>
<div class= "shop-name pull-left">
<%= link_to shop.name, shop %>
<% if current_user.admin? && !current_shop?(shop) %>
| <%= link_to "(Delete Shop)", shop, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
</div>
<div class= "shop-address pull-right">
<p><%= shop.address %> <br> <%= shop.city %>, <%= shop.state %> <%= shop.zip %> <br> <%= shop.phone %></p>
</div>
</li>
<% end %>
</ul>
如何允许管理员用户删除商店?
答案 0 :(得分:0)
您已将行动destroy
放入private
部分,这就是为什么它不可见。尝试将其向上移动private
关键字
答案 1 :(得分:0)
首先将destroy
操作移出私有,其次我无法在任何地方看到admin_shop
方法,要么删除此行,要么定义admin_shop
方法
before_action :admin_shop, only: :destroy
添加admin_shop
方法
def admin_shop
unless current_user.admin?
flash[:error] = "Not authorized"
redirect_to shops_url
end
end
在destroy
行动中
def destroy
user = User.find(current_user.id)
Shop.find(params[:id]).destroy
sign_in user, bypass: true
flash[:success] = "Shop deleted"
redirect_to shops_url
end
答案 2 :(得分:0)
您已将destroy方法设置为私有,因此无法访问。
before_action :logged_in_shop, only: [:edit, :update, :destroy]
你可能想删除:从这里删除,或者它会期望你以商店身份登录以便销毁它。我不确定您的访问控制是如何工作的,但要小心不要公开访问。