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