ActiveRecord :: StatementInvalid:Rails中的PG :: UndefinedColumn

时间:2018-03-19 16:39:42

标签: ruby-on-rails

所以完整的错误是:

  

失败/错误:@region = Region.find_by!(url_name:params [:id])ActiveRecord :: StatementInvalid:PG :: UndefinedColumn:ERROR:列regions.url_name不存在第1行:SELECT“regions”。 * FROM“regions”WHERE“regions”。“url_name ...

然后作为一个失败的例子我得到:

  

rspec ./spec/controllers/regions_controller_spec.rb:15#RegionsController show应呈现显示页面

在我的区域控制器中我有show:

def show
 @region = Region.find_by!(url_name: params[:id])
 @careers = @region.careers
end

对于我的区域规格控制器,我有:

describe 'show' do
it 'should render the show page' do
  region = Region::Create.run(FactoryBot.attributes_for(:region)).result
  get :show, params: { id: region.url_name }
  expect(response).to have_http_status :success
end

it 'should return a 404 error' do
  get :show, params: { id: 1 }
  expect(response).to have_http_status :not_found
end
end

在我所拥有的地区模型中:

class Region < ApplicationRecord
 scope :ordered, -> { order(name: :desc) }
 scope :search, ->(term) { where('name LIKE ?', "%#{term}%") }
 has_many :locations, dependent: :destroy
 has_many :careers, through: :locations
 validates :name, presence: true
end

在我的架构中,我有:

create_table "regions", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "url_name"
end

因此该列存在。页面使用url_name加载。然而它错误并且告诉我该列不存在......?

1 个答案:

答案 0 :(得分:1)

因此,看起来url_name存在于架构中,但另一个人删除了迁移文件。要解决我运行删除列迁移然后执行添加列迁移,它解决了问题。