删除“商店”对象作为“用户”对象管理员

时间:2015-03-03 09:28:18

标签: ruby-on-rails ruby

我有两类用户:"用户"和"商店"。我希望管理员成为"用户"并且能够删除商店,并且遇到了麻烦。

如果登录的用户是管理员(如下所示),我能够在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>

如何允许管理员用户删除商店?

3 个答案:

答案 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]

你可能想删除:从这里删除,或者它会期望你以商店身份登录以便销毁它。我不确定您的访问控制是如何工作的,但要小心不要公开访问。