gpt4 book ai didi

ruby-on-rails - ActiveRecord::StatementInvalid-SQLite3::SQLException:无此类列

转载 作者:行者123 更新时间:2023-12-03 18:56:26 25 4
gpt4 key购买 nike

在RSpec中运行测试时,出现以下错误:

Failures:

1) User micropost associations should have the right micropost in the right order
←[31mFailure/Error:←[0m ←[31m@user.microposts.should == [newer_micropost, older_micropost]←[0m
←[31mActiveRecord::StatementInvalid:←[0m
←[31mSQLite3::SQLException: no such column: micropost.created_at: SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = 1 ORD
ER BY micropost.created_at DESC←[0m
←[36m # C:in `load_target'←[0m
←[36m # ./spec/models/user_spec.rb:153:in `block (3 levels) in <top (required)>'←[0m

2) User micropost associations should destroy associated microposts
←[31mFailure/Error:←[0m ←[31mmicroposts = @user.microposts.dup←[0m
←[31mActiveRecord::StatementInvalid:←[0m
←[31mSQLite3::SQLException: no such column: micropost.created_at: SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = 1 ORD
ER BY micropost.created_at DESC←[0m
←[36m # C:in `load_target'←[0m
←[36m # ./spec/models/user_spec.rb:157:in `block (3 levels) in <top (required)>'←[0m

Finished in 5.18 seconds
←[31m97 examples, 2 failures←[0m


user_spec.rb:

require 'spec_helper'

describe User do

before do
@user = User.new(name: "John Smith", email: "john@example.com",
password: "password", password_confirmation: "password")
end

subject { @user }

it { should respond_to(:name) }
it { should respond_to(:email) }
it { should respond_to(:password_digest) }
it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }
it { should respond_to(:remember_token) }
it { should respond_to(:admin) }
it { should respond_to(:authenticate) }
it { should respond_to(:microposts) }

it { should be_valid }
it { should_not be_admin }

describe "micropost associations" do

before { @user.save }
let!(:older_micropost) do
FactoryGirl.create(:micropost, user: @user, created_at: 1.day.ago)
end
let!(:newer_micropost) do
FactoryGirl.create(:micropost, user: @user, created_at: 1.hour.ago)
end

it "should have the right micropost in the right order" do
# user.micropost returns an array
@user.microposts.should == [newer_micropost, older_micropost]
end

it "should destroy associated microposts" do
microposts = @user.microposts.dup
@user.destroy
microposts.should_not be_empty
microposts.each do |micropost|
Micropost.find_by_id(micropost.id).should be_nil
end
end
end
end


schema.rb(已缩短):

ActiveRecord::Schema.define(:version => 20131002154740) do

create_table "microposts", :force => true do |t|
t.string "content"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

add_index "microposts", ["user_id", "created_at"], :name => "index_microposts_on_user_id_and_created_at"

create_table "users", :force => true do |t|
.
.
.
.
end

end


Micropost模型:

class Micropost < ActiveRecord::Base
attr_accessible :content
belongs_to :user

validates :user_id, presence: true

# Ensures the microposts are in descending (DESC) order
# from newest to oldest, (SQL syntax).
default_scope order: 'micropost.created_at DESC'
end


我已经与 bundle exec rake db:migrate一起运行了 bundle exec rake db:test:prepare,我还重置了数据库并再次尝试,但这没有用。

具体来说,错误显示为: SQLite3::SQLException: no such column: micropost.created_at: SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = 1 ORD
ER BY micropost.created_at DESC

最佳答案

好吧,SQL问题是排序列上的表名是单数而不是复数。

即“ ORDER BY microposts.created_at”应显示为“ ORDER BY microposts.created_at”。

如果您还发布了Micropost和User模型源代码,我也许可以说出这是由模型代码中的错误还是ActiveRecord中的错误引起的。

您正在使用哪个版本的Rails?

关于ruby-on-rails - ActiveRecord::StatementInvalid-SQLite3::SQLException:无此类列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com