0

我试图禁止用户,但它没有按预期工作,可能是因为我不知道我在做什么:

Routes:

      resources :users do
        collection do
          post 'ban'
        end
      end


class UsersController < ApplicationController

  def ban
    @user = User.find(params[:id])
    if current_user.admin?
      @user.banned = true
      @user.avatar = nil unless @user.avatar.nil?
      @user.banned_by = current_user.full_name
      @user.profile = nil unless @user.profile.nil?
      @user.save
      redirect_to current_user, notice: "User has been banned."
    end
  end
end

在我看来:

<%= link_to "Ban User", ban_users_path(:id => @user.id), :method=>:post %>

由于某种原因,它传递了参数“ban”并说找不到用户。

4

1 回答 1

1

你的路线应该是

resources :users do
  member do
    post 'ban'
  end
end

成员路由作用于成员,因此您的请求看起来像POST /users/1/ban(用户 #1 是成员)。集合路由用于作用于整个集合,即POST /users/ban. 你的助手应该变成ban_user_path(@user)

此外,我认为您无需在将其设置为 nil 之前检查他们的头像/个人资料是否为 nil。只需将它们设置为零,无需检查。如果它们已经为 nil,则再次将它们设置为 nil 不会造成任何伤害。

于 2013-05-11T16:41:37.087 回答