У меня есть пользовательская модель с моделью скоринга, которая имеет значение score
. В моем представлении рельсы я хочу сделать заказ моих пользователей по счету. => User.joins (: scoring) .order (: score)
Пока все хорошо. это усложняется, когда я динамически изменяю оценки некоторых пользователей, не изменяя их в базе данных в соответствии с определенными атрибутами, такими как геолокация. Я попробовал функцию assign_attributes
, но она не изменилась, потому что функция .order
вызывает поля оценки в базе данных.
Вариант использования: я выполняю поиск пользователей по геолокации, и пользователи рядом с геолокацией появляются в мой поиск с их оценками. Я хотел бы взвесить оценки пользователей поблизости, поскольку они не имеют точного геолокации
Мой код:
#Get scoring in other geolocation
@fiches_proxi = Fiche.joins(:user).merge(User.joins(:scoring)).near([@geo.lat_long_DMS.to_f, @geo.lat_long_grd.to_f], proxi_calcule(@geo.population_2012.to_i),units: :km, :order => 'scorings.score DESC').order('scorings.score DESC').where.not(geo: @geo.id).limit(10)
#Get scoring in real geolocation
@fiche_order_algo_all = Fiche.joins(:user).merge(User.joins(:scoring)).where(geo_id: @geo)
#Find all scores
@fiches_all = Fiche.where(id: @fiche_order_algo_all.pluck(:id) + @fiches_proxi.pluck(:id))
@pagy, @fiche_order_algo = pagy(@fiches_all.joins(:user).merge(User.joins(:scoring).order('scorings.score DESC')), items: 12)
@fiche_order_algo.each do |f|
if f.geo.id != @geo.id
f.user.scoring.assign_attributes(score: (f.user.scoring.score - 10.0))
else
f.user.scoring.score
end
end
Мой счет обновлен, но мой заказ такой же!