Ruby on rails Ruby-赋值变量,如果在DB中找到,则返回
我正在寻找一种更简洁的方法来分配变量,并在不需要多次DB调用的controller before_action方法的DB中找到值时返回:Ruby on rails Ruby-赋值变量,如果在DB中找到,则返回,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我正在寻找一种更简洁的方法来分配变量,并在不需要多次DB调用的controller before_action方法的DB中找到值时返回: if Plan.exists?(plan) @plan = Plan.find(plan) return end logger.error "User selected invalid plan." redirect_to plan_path, warning: "Invalid plan selected!" 这是一个合适的救援地点吗?例如: be
if Plan.exists?(plan)
@plan = Plan.find(plan)
return
end
logger.error "User selected invalid plan."
redirect_to plan_path, warning: "Invalid plan selected!"
这是一个合适的救援地点吗?例如:
begin
@plan = Plan.find(plan)
rescue
logger.error "User selected invalid plan."
redirect_to plan_path, warning: "Invalid plan selected!"
end
感觉不对。。。最好的方法是什么?我认为没有最好的方法。这是品味的问题。我通常在Rails5API中使用后一种方式。差不多
def show
@book = Book.find(params[:id])
rescue ActiveRecord::RecordNotFound
render json: { error: "Book not found" }
end
<> p>如果一切正常,我就可以看到快乐路径 认为它是一个反模式,它使用异常来进行流控制。就我个人而言,我倾向于同意。但是,我想这是一个风格和偏好的问题
比如说:
def foo_before_action
unless @plan = Plan.find_by(id: params[:id])
redirect_to plan_path, warning: "Invalid plan selected!"
end
end
或者,作为一条直线:
def foo_before_action
redirect_to plan_path, warning: "Invalid plan selected!" unless @plan = Plan.find_by(id: params[:id])
end
前者可能更具可读性。唯一的问题是rubocp会抱怨在if语句中使用single=