比如说我生成添加一个 column_type 字段,model,controller,views 里该添加的地方都添加了,本地跑起来没有任何问题,,但发布到线上就报 ActionView::Template::Error..................undefined method `column_type' for #Class:0x000000059828a8 Did you mean? columns.............的错误?本人新手一个,求大神指导一下
controller.rb
def new
@course = Course.new
end
private
def course_params
params[:course][:price] = 0 if params[:course][:price].blank?
params.require(:course).permit(:topic, :cover, :introduction, :column_type)
end
_form.html.erb
<div class="form-group row <%= f.object.errors.include?(:column_type) ? 'has-danger' : '' %>">
<label class="col-md-2 form-control-label" for="select">
所属栏目
</label>
<div class="col-md-10 has-danger">
<%= f.select :column_type, options_for_select(Course.column_type.options, @course.column_type), {include_blank: '请选择'}, class: 'select2 form-control' %>
</div>
</div>
model.rb
class Course < ApplicationRecord
acts_as_paranoid
extend Enumerize
enumerize :column_type, in: { hot_spot: 1, life: 2}
部署线上是用 cap 一键部署的,去线上的数据库里面查看了,但这个字段已经有了,还是报错。。这就是这个问题的奇怪之处,弄了好久都没弄明白咋回事
没环境调试不知道问题在哪。提醒一下 ActiveRecord 自带 enum https://api.rubyonrails.org/v5.2.2/classes/ActiveRecord/Enum.html
Sorry。没有仔细看出错信息。这里#Class:0x000000059828a8 没有显示出具体的 class,所以是 class_level 的 error。你对下出错信息里面的行号,是不是这一行。
<%= f.select :column_type, options_for_select(Course.column_type.options, @course.column_type), {include_blank: '请选择'}, class: 'select2 form-control' %> <%= f.select :column_type, options_for_select(Course.column_type.options, @course.column_type), {include_blank: '请选择'}, class: 'select2 form-control' %>
那就是 Course.column_type 报的错,你可以具体排查一下为什么 enumerize :column_type 这个 dsl 没有给 Course define column_type 这个方法。