Может один любезно сообщить мне, как я отображение пользователей с overall_ratings 0. Как отобразить пользователь со
overall_ratings
от 0? В настоящее время я могу отобразить пользователей рейтинги 0, но я не знаю, как получить тех пользователей (информация пользователя), которые имеют рейтинг нулевойSQL-запрос для полиморфного отношения - Rails 4
схема
ActiveRecord::Schema.define(version: 20170202214851) do
create_table "rates", force: :cascade do |t|
t.integer "rater_id"
t.integer "rateable_id"
t.string "rateable_type"
t.float "stars", null: false
t.string "dimension"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "rates", ["rateable_id", "rateable_type"], name: "index_rates_on_rateable_id_and_rateable_type"
add_index "rates", ["rater_id"], name: "index_rates_on_rater_id"
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "firstname"
t.string "lastname"
end
end
rate.rb
class Rate < ActiveRecord::Base
belongs_to :rater, :class_name => "User"
belongs_to :rateable, :polymorphic => true
end
в моей user.rb модели у меня есть метод overall_ratings
который отображает над всеми рейтинг пользователя
метод user.rb
def overall_ratings
array = Rate.where(rateable_id: id, rateable_type: 'User')
stars = array.map {|user| user.stars }
star_count = stars.count
stars_total = stars.inject(0){|sum,x| sum + x }
score = stars_total/(star_count.nonzero? || 1)
end
терминал
2.3.0 :109 > user = User.find(20)
2.3.0 :116 > user.overall_ratings
Rate Load (3.0ms) SELECT "rates".* FROM "rates" WHERE "rates"."rateable_id" = ? AND "rates"."rateable_type" = ? [["rateable_id", 20], ["rateable_type", "User"]]
=> 3.5
я пытаюсь найти пользователей, которые имеют рейтинг 0, но я не уверен, как написать правильный SQL для отобразить эту информацию
users = User.all
2.3.0 :189 > users.map(&:overall_ratings)
=> [4.0, 3.75, 0, 3.0, 0, 0, 0, 0, 0, 0, 0, 0, 4.0, 0, 0, 3.0, 3.5, 0, 0, 0, 0]
2.3.0 :197 > users.map(&:overall_ratings).delete_if{|i|i>=1}
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
вопрос: как мне отображать пользователей с
overall_ratings
из 0? в настоящее время я могу отображать пользователей с рейтингами 0, но я не знаю, как получить тех пользователей, у которых есть нулевой рейтинг. Ваша помощь была бы оценена
я не уверен ... я пытаюсь ниже, но я знаю его неправильно
2.3.0 :203 > users_with_ratings_of_zero = users.map(&:overall_ratings).delete_if{|i|i>=1}
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2.3.0 :208 > users_with_ratings_of_zero.map(&:users)
NoMethodError: undefined method `users' for 0:Fixnum
вау! спасибо, много ... в основном для объяснения за ответом. очень ценится! – ARTLoe
Добро пожаловать. :) –