Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Patricio Sanchez
/
quiniela-mundial
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Iker Narvaez
2018-06-11 17:50:25 -0500
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
6a6a2f9e1164f95af2603844f3903edc2b1b0578
6a6a2f9e
1 parent
4aa131b6
leaderboard by user groups
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
32 additions
and
6 deletions
app/controllers/application_controller.rb
app/controllers/bets_controller.rb
app/models/bet.rb
app/models/group.rb
app/views/application/_leaderboard.html.slim
app/views/bets/_pool_form.slim
app/controllers/application_controller.rb
View file @
6a6a2f9
...
...
@@ -11,8 +11,13 @@ class ApplicationController < HeimdallEngine::ApplicationController
private
def
leaderboard
Bet
.
joins
(
:user
).
group
(
'users.name'
).
sum
(
:points
).
sort_by
{
|
k
,
v
|
v
}
.
take
(
5
)
Group
.
for
(
current_user
.
id
).
inject
({})
do
|
h
,
group
|
h
[
group
.
name
]
=
{
pool:
group
.
pool_name
,
leaderboard:
Bet
.
for_pool
(
group
.
pool_id
).
board
.
take
(
5
)
}
h
end
end
def
check_matches
...
...
app/controllers/bets_controller.rb
View file @
6a6a2f9
...
...
@@ -9,6 +9,7 @@ class BetsController < ApplicationController
if
current_user
.
update_attributes
(
object_params
)
redirect_to
bets_path
else
load_active_pools
render
:index
end
end
...
...
app/models/bet.rb
View file @
6a6a2f9
#
class
Bet
<
ApplicationRecord
validates
:
score_local
,
:score_visit
,
presence:
true
validates
:
visit
,
:local
,
:date
,
presence:
true
belongs_to
:user
,
inverse_of: :bets
belongs_to
:match
,
inverse_of: :bets
has_one
:group
,
through: :user
,
inverse_of: :bets
enum
result:
[
:visit
,
:tie
,
:local
]
scope
:active
,
->
{
joins
(
match: :pool
).
where
(
pools:
{
active:
true
})
}
scope
:for_pool
,
->
(
pool_id
)
{
joins
(
:match
).
where
(
matches:
{
pool_id:
pool_id
}
)
}
scope
:board
,
(
lambda
do
joins
(
:user
)
.
group
(
'users.name'
)
.
order
(
'sum_points'
)
.
sum
(
:points
)
end
)
before_save
:assign_result
def
calculate
...
...
app/models/group.rb
View file @
6a6a2f9
...
...
@@ -5,6 +5,12 @@ class Group < ApplicationRecord
validates
:name
,
:pool
,
presence:
true
delegate
:name
,
to: :pool
,
prefix:
true
scope
:active
,
->
{
joins
(
:pool
).
where
(
pools:
{
active:
true
})
}
scope
:for
,
->
(
user_id
)
{
joins
(
:users
).
where
(
'users.id = ?'
,
user_id
).
distinct
}
def
users_count
users
.
count
end
...
...
app/views/application/_leaderboard.html.slim
View file @
6a6a2f9
h1
Leaderboard
table
.leaderboard
tbody
-
@leaders
.
each
do
|
user
,
points
|
-
@leaders
.
each
do
|
group_name
,
data
|
tr
td
=
user
td
colspan
=
2
=
group_name
-
data
[
:leaderboard
].
each
do
|
user_name
,
points
|
tr
td
=
user_name
td
=
points
-
if
@leaders
.
empty?
-
if
data
[
:leaderboard
]
.
empty?
tr
td
colspan
=
2
There
are
no
results
yet
...
...
app/views/bets/_pool_form.slim
View file @
6a6a2f9
-
if
current_user
.
errors
.
any?
div
=
current_user
.
errors
.
full_messages
.
to_sentence
table
.pools
-
pool
.
matches
.
each
do
|
match
|
-
bet
=
current_user
.
bets
.
find_or_initialize_by
(
match_id:
match
.
id
)
...
...
Please
register
or
login
to post a comment