Skip to content

Instantly share code, notes, and snippets.

@a-ono
Created April 9, 2014 06:05
Show Gist options
  • Save a-ono/10230452 to your computer and use it in GitHub Desktop.
Save a-ono/10230452 to your computer and use it in GitHub Desktop.
hasManyThrough
// retrieve users with specific role by executing two queries
val userIds = project1.memberships.where(_.roleId === role1.id).select(_.userId)
println(User.where(_.id in userIds).toList)
// or define additional associations for assigning and retrieving users with specific role
case class Project(name: String) extends ActiveRecord {
lazy val memberships = hasMany[Membership]
lazy val users = hasManyThrough[User, Membership](memberships)
// additional associations
lazy val role1Memberships = hasMany[Membership](conditions = Map("roleId" -> 1))
lazy val role1Users = hasManyThrough[User, Membership](role1Memberships)
}
project1.role1Users << user1
// equivalents:
// val membership = project1.users << user1
// membership.roleId = 1
// membership.save
project1.users << user2
println(project1.role1Users.toList) //=> List(user1)
println(project1.users.toList) // => List(user1, user2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment