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 である場合、再び nil に設定しても害はありません。

于 2013-05-11T16:41:37.087 に答える