Ruby Ohm,如何在一个集合或集合中找到记录?

Ruby Ohm,如何在一个集合或集合中找到记录?

问题描述:

此问题与其他:Many-to-many relationships with Ruby, Redis, and OhmRuby Ohm,如何在一个集合或集合中找到记录?

我有一个模型与集合,我想寻找一个id。我怎样才能做到这一点?

模型

class User < Ohm::Model 
    attribute :name 
end 

class Event < Ohm::Model 
    attribute :title 
    collection :attendees, :User 
end 

使用

@fran = User.create(name: "Fran") 
@event = Event.create(title: "Party in Las Vegas") 
@event.attendees.add(@fran) 

Event.find(attendees: @fran) 
=> Ohm::IndexNotFound exception! 

我想是能够通过其参加活动的用户要问,什么是由用户的活动。

+0

你好弗兰,明天我会回复,对不起,延迟! – soveran 2015-01-04 22:47:26

您希望一组所有用户参加一个活动,并且您还希望一组用户参与的所有活动。最简单的方法是创建一个引用既是用户,又一个事件的模型Attendee

class Attendee < Ohm::Model 
    reference :user, :User 
    reference :event, :Event 
end 

u = User.create(name: "foo") 
e = Event.create(name: "bar") 

a = Attendee.create(user: u, event: e) 

Attendee.find(user_id: u.id).include?(a) #=> true 
Attendee.find(event_id: e.id).include?(a) #=> true 

然后,如果你想要的是参与活动的所有用户:

Attendee.find(event_id: e.id).map(&:user) 

或者由出席的所有活动用户:

Attendee.find(user_id: e.id).map(&:event) 

您可以创建在UserEvent方法作为快捷方式的发现者:

class User < Ohm::Model 
    attribute :name 

    def events 
    Attendee.find(user_id: id).map(&:event) 
    end 
end 

class Event < Ohm::Model 
    attribute :name 

    def visitors 
    Attendee.find(event_id: id).map(&:user) 
    end 
end 

然后:

u.events.include?(e) #=> true 
e.visitors.include?(u) #=> true 

让我知道它是否适合你的使用情况。

+0

因此...与欧姆我必须手工管理多对多的关系。我认为在ActiveRecord中有一些像has_and_belongs_to_many一样的东西。但无论如何这是有效的。 – 2015-01-07 16:29:34

我不熟悉欧姆,但我认为你只需要添加索引

class Event < Ohm::Model 
    attribute :title 
    collection :attendees, :User 
    index :attendees 
end 

那么你应该能够做到

Event.find(attendees: @fran) 

OR

Event.find(attendees: @fran.id)