1

次のコントローラーメソッドがあるとします。

  def create
    @client = User.find(params[:client][:id])
    respond_to do |format|
      if @client.present? && @client.add_manager(current_user)
        format.html { redirect_to clients_path, notice: "Successfully added manager" }
      else
        format.html { redirect_to clients_path, error: "Could not find client" }
      end
    end
  end

本番環境で「問題が発生しました」となる RuntimeError をスローする代わりに、else ブロックでこれを適切に失敗させるにはどうすればよいですか?

  def add_manager(user)
    raise "Already a manager" if self.manager_users.include?(user)
    self.manager_users << user if user.trainer?
  end

コードですか…

4

1 に答える 1

0

次のようなことを試すことができます:

コントローラーで

class YourAppName::AlreadyManagerError < StandardError

end

"Already a manager" をカスタム エラーの名前に変更します。

def add_manager(user)
  raise YourAppName::AlreadyManagerError if self.manager_users.include?(user)
  self.manager_users << user if user.trainer?
end    

次に、ApplicationControllerで

rescue_from YourAppName::AlreadyManagerError do |exception|
  render :nothing => "Already a manager", :status => 404
end

この記事では、さらに詳しく説明します。また、 rescue_fromもチェックしてください

于 2013-05-21T03:16:40.807 に答える