2016-12-10 8 views
1

Я новичок в 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 

конец конец

ответ

1

в users_controller.rb

def index 
    @items = Item.order('likes_count') 
end 
+0

Заур благодарит вас за ответ. Несмотря на то, что этот экран появляется, никакого упорядочения по «подобному» не было достигнуто. Его все еще показывая порядок по времени. Некоторые предметы, у которых есть 5 понравлений, находятся ниже вещей, у которых их нет, но они были созданы ранее. – Omar

+0

Я также добавил свои миграции, чтобы вы могли видеть, как они были созданы. Большое вам спасибо за вашу помощь sir – Omar

+0

Вы видите, что подходящий подобный вопрос в базе данных? Возможно, вам потребуется сбросить счетчики, используя следующий код: Item.each {| item | Item.reset_counters (item.id,: нравится)} –