オームを使用して、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
私ができるようにしたいのは、オームのインデックス機能を活用して、次のような検索を実行することです。
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:Index:author_idnotfound。(著者に与えられた本を見つけようとするとき)
ここで説明されているようにカスタムインデックスを作成しようとしました:http://ohm.keyvalue.org/examples/tagging.html、そしてここで:http: //pinoyrb.org/ruby/ohm-inside-tricks
残念ながら、モデルが最初に作成されたときにインデックスが作成されているように見えます。つまり、セットは空です(私が正しく理解していれば、モデルにIDが割り当てられるまで、セットはオームでは使用できません)。
私は本当に助けや提案に感謝します!