所以完整的错误是:
失败/错误:@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加载。然而它错误并且告诉我该列不存在......?
答案 0 :(得分:1)
因此,看起来url_name存在于架构中,但另一个人删除了迁移文件。要解决我运行删除列迁移然后执行添加列迁移,它解决了问题。