Ruby 哎呀,如何在集合或集合中查找记录?
Ruby Ohm, how to find a record in a set or collection?
此问题与其他问题相关:Many-to-many relationships with Ruby, Redis, and 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!
我希望用户能够询问用户参加了哪些活动以及用户参加的活动是什么。
我不熟悉欧姆,但我认为你只需要添加索引
class Event < Ohm::Model
attribute :title
collection :attendees, :User
index :attendees
end
那你应该可以做到
Event.find(attendees: @fran)
或
Event.find(attendees: @fran.id)
您想要一组所有参加活动的用户,还想要一组所有用户参加的活动。最简单的方法是创建一个同时引用用户和事件的模型 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
让我知道它是否适用于您的用例。
此问题与其他问题相关:Many-to-many relationships with Ruby, Redis, and 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!
我希望用户能够询问用户参加了哪些活动以及用户参加的活动是什么。
我不熟悉欧姆,但我认为你只需要添加索引
class Event < Ohm::Model
attribute :title
collection :attendees, :User
index :attendees
end
那你应该可以做到
Event.find(attendees: @fran)
或
Event.find(attendees: @fran.id)
您想要一组所有参加活动的用户,还想要一组所有用户参加的活动。最简单的方法是创建一个同时引用用户和事件的模型 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
让我知道它是否适用于您的用例。