2015-01-04 3 views
0

Этот вопрос относится к тому адресу: Many-to-many relationships with Ruby, Redis, and OhmRuby Ohm, как найти запись в наборе или коллекции?

У меня есть модель с коллекцией, и я бы хотел найти идентификатор. Как я могу это сделать?

Модель
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

Привет, Fran, я отвечу в полном объеме завтра, извините за задержку! – soveran

ответ

1

Вы хотите, чтобы набор всех пользователей посещал событие, и вам также нужен набор всех событий, которые посетил пользователь. Простым способом было бы создать модель 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) 

Вы можете создать методы в User и Event как ярлыки для тех искателей:

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. Но это все равно. –

0

Я не знаком с Ом, но я думаю, вам нужно только добавить индекс

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

Тогда вы должны быть в состоянии сделать

Event.find(attendees: @fran) 

ИЛИ

Event.find(attendees: @fran.id) 

 Смежные вопросы

  • Нет связанных вопросов^_^