【发布时间】:2016-09-07 18:07:42
【问题描述】:
创建了一个线程here,但它并没有解决我的问题。
我的代码是:
course.rb
class Course < ApplicationRecord
COURSE_TYPES = %i( trial limited unlimited )
enum course_type: COURSE_TYPES
validates_inclusion_of :course_type, in: COURSE_TYPES
end
courses_controller.rb
class CoursesController < ApiController
def create
course = Course.new(course_params) # <-- Exception here
if course.save # <-- But I expect the process can go here
render json: course, status: :ok
else
render json: {error: 'Failed to create course'}, status: :unprocessable_entity
end
end
private
def course_params
params.require(:course).permit(:course_type)
end
end
我的测试用例:
courses_controller_spec.rb
describe '#create' do
context 'when invalid course type' do
let(:params) { { course_type: 'english' } }
before { post :create, params: { course: params } }
it 'returns 422' do
expect(response.status).to eq(422)
end
end
end
在运行上述测试用例时,我遇到了 ArgumentError 异常,该异常在 Rails issues 中进行了描述
所以我希望如果我将无效的course_type 设置为枚举,它将在验证阶段失败而不是引发异常。
此外,我知道在here 的rails 中真正发生了什么,并且我不想在每个分配枚举类型值的代码块中手动拯救这种异常!
对此有何建议?
【问题讨论】:
标签: ruby-on-rails enums