Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails 3+;有正常的控制流吗?_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何在Rails 3+;有正常的控制流吗?

Ruby on rails 如何在Rails 3+;有正常的控制流吗?,ruby-on-rails,Ruby On Rails,给定以下控制器方法: 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 manage

给定以下控制器方法:

  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
我如何让它在else块中正确地失败,而不是抛出一个运行时错误,从而在生产中变成“出了问题”

  def add_manager(user)
    raise "Already a manager" if self.manager_users.include?(user)
    self.manager_users << user if user.trainer?
  end
def添加管理器(用户)
如果self.manager\u用户,则提出“已成为经理”。包括?(用户)

self.manager\u用户您可以尝试以下方法:

在控制器中

class YourAppName::AlreadyManagerError < StandardError

end

这将涉及更多细节。还可以查看

rails控制流(如使用if和then进行响应的块)是如何在该记录上进行保存的,从而使其在重定向时命中true if块,然后命中false?我只想用我自己的方法遵循同样的模式。
def add_manager(user)
  raise YourAppName::AlreadyManagerError if self.manager_users.include?(user)
  self.manager_users << user if user.trainer?
end    
rescue_from YourAppName::AlreadyManagerError do |exception|
  render :nothing => "Already a manager", :status => 404
end