0

次のようなイベントのリストがあります。

イベント = Events.all

Eventsspring-security-plugin からのアプローチをモデルにしたUsersvia クラスと多対多の関係があります。UserEvents

Useraが an に参加しているかどうかを調べたいのEventですが、これを実行することでそれを行うことができます:

UserEvent.get(currentUserId, eventId)

質問

リストのすべての要素に対してこれを行うにはどうすればよいですか?ビュー レイヤーでイベントに参加eventsするかどうかを簡単に確認できますか?currentUserId

4

3 に答える 3

1

ユーザーが参加するイベントのサブセットのみが必要な場合は、Burt Beckwith が提案したものを使用してください。

ただし、イベントのセット全体が必要で、属性を追加するだけの場合は、metaClass を使用する必要があります。

event.metaClass.userAttends= ... 

ここでmetaClassに関する説明を見ることができます

特にあなたの状況では、Burt Beckwithが言ったようにすべてのIDを取得し、IDがリストにあるかどうかを各イベントで確認します。

def eventIds = UserEvent.findAllByUser(user).eventId
expandedEvents = events.collect {event-> 
   event.metaClass.usetAttends = eventIds.contains(event.id)
   return event}
于 2013-02-28T20:18:21.600 に答える
1

User次のEventように、関連するすべての を照会できます。

def user = ...
def events = UserEvent.findAllByUser(user).event

これは、次のような SQL を実行するため、かなり効率的なクエリです。

select * from user_event where user_id=?

そして、それぞれをロードしますEvent。各イベントを個別にロードするため、これは N+1 ですが、これを使用するとより効率的に実行できます。

def eventIds = UserEvent.findAllByUser(user).eventId
def events = Event.getAll(eventIds)

最初の行は、上記と同じ SQL を使用してイベント ID を取得するだけで、2 行目は次のように SQL を実行します。

select * from event where id in (?, ?, ?, ...)
于 2013-02-28T19:07:32.793 に答える
0

アイテムを返すgrep()かどうかでイベントのリストをフィルタリングするために使用できます。UserEvent.get()

events.grep { UserEvent.get(currentUserId, it.id) }
于 2013-02-28T17:45:05.670 に答える