【发布时间】:2011-11-20 22:46:10
【问题描述】:
我正在尝试使用 Ohm 在 Redis 中创建多对多关系。例如,我将 Book 和 Author 模型定义如下:
class Book < Ohm::Model
attribute :title
set :authors, Author
end
class Author < Ohm::Model
attribute :last_name
attribute :first_name
set :books, Book
end
我希望能够利用 Ohm 的索引功能进行查找,例如:
require 'test_helper'
class ManyToManyRelationshipTest < ActiveSupport::TestCase
setup do
@dave_thomas = FactoryGirl.build(:dave_thomas)
@andy_hunt = FactoryGirl.build(:andy_hunt)
@chad_fowler = FactoryGirl.build(:chad_fowler)
@pick_axe = FactoryGirl.build(:pick_axe)
@pick_axe.authors << @dave_thomas
@pick_axe.authors << @andy_hunt
@pick_axe.authors << @chad_fowler
@thinking_and_learning = FactoryGirl.build(:pragmatic_thinking_and_learning)
@thinking_and_learning.authors << @andy_hunt
end
test "find a Book by Author" do
assert Book.find(:author_id => @andy_hunt.id).include?(@pick_axe)
assert Book.find(:author_id => @andy_hunt.id).include?(@thinking_and_learning)
end
test "find Authors by Book" do
assert Author.find(:book_id => @pick_axe.id).include?(@dave_thomas)
assert Author.find(:book_id => @pick_axe.id).include?(@andy_hunt)
assert Author.find(:book_id => @pick_axe.id).include?(@chad_fowler)
end
end
使用上面的代码,我得到以下异常: Ohm::Model::IndexNotFound: 索引 :author_id 未找到。 (当试图查找给定作者的书籍时)
我已尝试按照此处所述构建自定义索引:http://ohm.keyvalue.org/examples/tagging.html,以及此处:http://pinoyrb.org/ruby/ohm-inside-tricks
不幸的是,看起来索引是在第一次创建模型时构建的,这意味着 Set 是空的(因为,如果我理解正确的话,在模型被分配 ID 之前,Set 在 Ohm 中是不可用的)。
非常感谢任何帮助或建议!
【问题讨论】: