gpt4 book ai didi

sql - RSpec:伪造的 SQL 错误?

转载 作者:行者123 更新时间:2023-11-28 19:55:09 26 4
gpt4 key购买 nike

我有一个照片模型,使用以下方法按名称搜索关联标签:

class Photo < ActiveRecord::Base
has_many :taggings, :dependent => :destroy
has_many :tags, :through => :taggings
...

def self.tagged_with( string )
array = string.split(',').map{ |s| s.lstrip }
joins(:tags).where('tags.name' => array ).group(:id)
end

...
end

如果我在控制台中使用它,它会产生我所期望的结果:

Photo.tagged_with('foo, bar, baz')
# Returns unique photos with tags named foo, bar, or baz

但是,我尝试使用 RSpec 中的测试来构建它,但测试失败了。这是我的测试:

describe "tags" do
it "should return a list of photos matching a string of tags" do
t1 = Tag.create(:name=>'test')
t2 = Tag.create(:name=>'bar')
t1.photos << Photo.find(1,2,3)
t2.photos << Photo.find(3,4)
t1.save
t2.save

Photo.tagged_with('test').should have(3).photos
Photo.tagged_with('bar').should have(2).photos
Photo.tagged_with('test, bar').should have(4).photos
end
end

此测试失败并出现以下错误:

  1) Photo tags should return a list of photos matching a string of tags
Failure/Error: Photo.tagged_with('test').should have(3).photos
ActiveRecord::StatementInvalid:
SQLite3::SQLException: ambiguous column name: id: SELECT COUNT(*) AS count_all, id AS id FROM "photos" INNER JOIN "taggings" ON "photos"."id" = "taggings"."photo_id" INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id" WHERE "tags"."name" IN ('test') GROUP BY id
# ./spec/models/photo_spec.rb:84:in `block (3 levels) in <top (required)>'

因此,代码可以运行,但测试失败。我在测试中做错了什么?

最佳答案

它似乎在提示,因为您按 id 分组并且 photos 和 taggings 表都有 id(数据库不知道您指的是 photos.id 还是 taggings.id,因此出现“不明确”错误)。尝试在您的 tagged_with 方法中将 .group(:id) 更改为 .group('photos.id')

关于sql - RSpec:伪造的 SQL 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397211/

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