URL-адрес одинаков для всех перенаправлений (если я вижу правильно, нет разницы между URL-адресом и путем), поэтому я бы изменил код следующим образом:
def start
@work_hours = params[:work_hours].to_i
flash[:error] = I18n.t('error.invalid_post') unless (1..8).include? @work_hours
flash[:error] = I18n.t('error.working') if current_user.working?
flash[:error] = I18n.t('error.has_quest') if current_user.has_tavern_quest?
redirect_to labor_path
end
Итак: при необходимости установите флэш-память,и перенаправить на labor_path
во всех случаях.Помогает ли это?
Если в случае ошибки вам нужно будет перенаправить на что-то другое, сделайте что-то вроде:
def start
@work_hours = params[:work_hours].to_i
flash[:error] = I18n.t('error.invalid_post') unless (1..8).include? @work_hours
flash[:error] = I18n.t('error.working') if current_user.working?
flash[:error] = I18n.t('error.has_quest') if current_user.has_tavern_quest?
redirect_to labor_error_path and return if flash[:error]
redirect_to labor_path
end
Если условия не являются взаимоисключающими, я бы написал это так:
def start
@work_hours = params[:work_hours].to_i
flash[:error] = unless (1..8).include? @work_hours
I18n.t('error.invalid_post')
elsif current_user.working?
I18n.t('error.working')
elsif current_user.has_tavern_quest?
I18n.t('error.has_quest')
else
nil
end
redirect_to labor_error_path and return if flash[:error]
redirect_to labor_path
end
Я не совсем уверен, явно ли нужен else nil
.Это помогает?