instalar gemas ruby-on-rails sorting activerecord ruby-on-rails-4 railscasts

ruby-on-rails - instalar gemas de ruby en windows



Usando la gema del Sistema de Reputación del Registro Activo, no ocurre clasificación cuando clasifico por votos (1)

EDITAR

Al poner el código en mis manos, descubrí que el verdadero problema radica en el uso de default_scope .

La cláusula order() original especificada en su ámbito predeterminado todavía se está aplicando, incluso cuando se agrega su propia order() .

Como nota al margen, este problema se corrigió en Rails 4.0, pero el comportamiento se revirtió en 4.0.1.

La solución fue aplicar un reorder()

# model def self.popular reorder(''votes desc'').find_with_reputation(:votes, :all) end # controller def index @microposts = Micropost.page(params[:page]).popular end

RESPUESTA ORIGINAL

Parece que usar el método de activerecord-reputation-system directamente puede no funcionar con activerecord-reputation-system ,

Sin embargo, encontré algunos ejemplos que muestran que puedes usar la page will_paginate y los métodos:

Quizás funcionará así:

Micropost.page(params[:page]).per(30).find_with_reputation(:votes, :all, order: "votes desc")

O con el alcance del modelo como este:

def self.popular find_with_reputation(:votes, :all, order: ''votes desc'') end

podrías hacer esto:

Micropost.page(params[:page]).per(30).popular

Además, como nota al margen, su archivo de rutas es un poco extraño con múltiples bloques de member , cuando solo uno es necesario. Haría que se vea así:

resources :microposts, only: [:create, :destroy, :index] do member do post :vote post :retweet end end

Después de RailsCast para la gema del sistema de reputación, agregué el siguiente código a mi microposts_controller

def index @microposts = Micropost.paginate(page: params[:page]).find_with_reputation(:votes, :all, order: "votes desc") @micropost = current_user.microposts.build end

Pero no ocurre ninguna clasificación en mi acción de índice aparte del alcance predeterminado que establecí en mi modelo

En mi modelo de micropost, tengo

class Micropost < ActiveRecord::Base belongs_to :user has_many :retweets has_reputation :votes, source: :user, aggregated_by: :sum default_scope -> { order(''created_at DESC'') }

Si cambio el alcance predeterminado a

default_scope -> { order(''votes DESC'') }

Funciona como quiero que solo para la página de índice, pero rompe todas mis otras páginas.

Intenté eliminar el alcance predeterminado y salir en el método find_with_reputation pero todavía no ordena por votos.

También traté de definir el alcance en un método en el modelo de micropost como este

def self.popular find_with_reputation(:votes, :all, {:order => ''votes desc''}) end

Y crea el código en el microposts_controller como este

def index @microposts = Micropost.paginate(page: params[:page]).popular @micropost = current_user.microposts.build end

Todavía no ordena por votos.

Aquí hay una copia de la salida de registro de visitar la página de índice de micropost https://gist.github.com/anonymous/9745552

Aquí hay un enlace a la gema https://github.com/NARKOZ/activerecord-reputation-system/tree/rails4

Mi routes.rb para microposts se parece a esto

resources :microposts, only: [:create, :destroy, :index] do member { post :vote } member { post :retweet} end

Cualquier orientación es apreciada.

Actualizar

El feed de mi página de inicio está diseñado de forma diferente a lo que estoy haciendo para el feed de índice de Micropost. Tal vez comparar lo que funciona con lo que no ayude a identificar el problema.

Tengo un controlador de Páginas estáticas que establece su alcance para la acción en casa como este

def home @micropost = current_user.microposts.build @feed_items = current_user.feed.paginate(page: params[:page]) end

En el modelo de usuario, defino el método de alimentación utilizado en el controlador de páginas estáticas como tal

def feed Micropost.from_users_followed_by_including_replies(self) end

el from_users_followed_by_including_replies(self) es un ámbito que establecí en el modelo de micropost

scope :from_users_followed_by_including_replies, lambda { |user| followed_by_including_replies(user) } def self.followed_by_including_replies(user) followed_ids = %(SELECT followed_id FROM relationships WHERE follower_id = :user_id) where("user_id IN (#{followed_ids}) OR user_id = :user_id OR to_id = :user_id", { :user_id => user }) end

Tal vez deba adaptar un enfoque similar a la acción Index para el controlador Microposts