Я новичок в ruby on rails, поэтому, пожалуйста, простите. Я пробовал следовать этому примеру Rails sort tags by most used (tag.posts.count), но продолжал получать сообщение об ошибке «undefined method` order »для Items: Module». Я пытаюсь сортировать список предметов, основанный на симпатичных деталях. Таким образом, предмет с 5 понравившимися должен быть помещен над предметом только с 3 понравившимися. Ниже приведен список всех моих соответствующих кодексов ниже. Большое спасибо, ребята!Сортировка списка товаров в Rails на основе отзывов, полученных пользователями
Like.rb
class Like < ApplicationRecord
belongs_to :item, :counter_cache => true
belongs_to :user
end
Likes_controller.rb
class Items::LikesController < ApplicationController
before_action :authenticate_user!
before_action :set_book
def create
@item.likes.where(user_id: current_user.id).first_or_create
respond_to do |format|
format.html {redirect_to @item}
format.js
end
end
def destroy
@item.likes.where(user_id: current_user.id).destroy_all
respond_to do |format|
format.html {redirect_to @item}
format.js
end
end
private
def set_book
@item = Item.find(params[:item_id])
end
end
item.rb
class Item < ApplicationRecord
has_many :likes, :counter_cache => true
users_controller.rb
class UsersController < ApplicationController
before_action :authenticate_user!
before_action :set_user, only: [:show, :edit, :update, :destroy]
def index
@items = Item.all
Items.order('likes_count')
end
def show
@items = Item.find(params[:id])
end
private
def set_user
@item = Item.find(params[:id])
end
end
index.html.erb
<% @items.each do |item| %>
<%= item.product %>
<div><%= image_tag(item.avatar.url(:thumb)) %></div>
<% end %>
Миграции Соответствующие
class AddLikecountsToItem < ActiveRecord::Migration[5.0]
def change
add_column :items, :likes_count, :integer, :null => false, :default => 0
end
end
class CreateLikes < ActiveRecord::Migration[5.0]
def change
create_table :likes do |t|
t.integer :user_id
t.integer :item_id
t.timestamps
end
конец конец
Заур благодарит вас за ответ. Несмотря на то, что этот экран появляется, никакого упорядочения по «подобному» не было достигнуто. Его все еще показывая порядок по времени. Некоторые предметы, у которых есть 5 понравлений, находятся ниже вещей, у которых их нет, но они были созданы ранее. – Omar
Я также добавил свои миграции, чтобы вы могли видеть, как они были созданы. Большое вам спасибо за вашу помощь sir – Omar
Вы видите, что подходящий подобный вопрос в базе данных? Возможно, вам потребуется сбросить счетчики, используя следующий код: Item.each {| item | Item.reset_counters (item.id,: нравится)} –