2015-05-28 89 views
0

我使用Rails 4與印象派寶石來獲得我的文章的查看次數。鏈接到訂單索引軌道4

在我的索引頁我有一個標有「最受歡迎」的鏈接

我也有機會獲得,將責令被觀看次數物品的方法:

@articles = Article.order('impressions_count ASC') 

什麼是最好的方式當用戶點擊「最流行的按鈕」時,按impression_count排序索引?我無法找到關於此的文檔。

這裏是我的articles_controller.rb

class ArticlesController < ApplicationController 
    load_and_authorize_resource 
    before_action :set_article, only: [:show, :edit, :update, :destroy] 

    def index 
    if params[:q].present? 
     @articles = Article.search(params[:q], misspellings: {edit_distance: 1}, page: params[:page], per_page: 12) 
     @search = current_or_guest_user.searches.create!(query: params[:q], searched_at: Time.now) 
    else 
     @articles = Article.order('impressions_count ASC').page(params[:page]).per(12) 
     @search = current_or_guest_user.searches.create!(query: params[:q], searched_at: Time.now) 
    end 
    if @articles.blank? 
     return redirect_to request_path 
     @search = current_or_guest_user.searches.create!(query: params[:q], searched_at: Time.now) 
    end 
    get_query 
    end 

    def autocomplete 
    @articles = Article.search params[:term], autocomplete: true 
    render json: @articles 
    end 

    def search 
    @articles = Article.search params[:q], suggest: true, page: params[:page], per_page: 5 
    @search = current_or_guest_user.searches.create!(query: params[:q], searched_at: Time.now) 
    render 'index' 
    end 

    def show 
    impressionist(@article, nil, { unique: [:session_hash] }) 
    @skip_error = true 
    @subarticles = @article.subarticles.approved.order(:cached_votes_score => :desc) 
    if request.path != article_path(@article) 
     redirect_to @article, status: :moved_permanently 
    else 
     respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @article } 
     end 
    end 
    end 

    def new 
    end 

    def edit 
    end 

    def create 
    respond_to do |format| 
     if @article.save 
     format.html { redirect_to @article, notice: 'Article was successfully created.' } 
     format.json { render :show, status: :created, location: @article } 
     else 
     format.html { render :new } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    respond_to do |format| 
     if @article.update(article_params) 
     format.html { redirect_to @article, notice: 'Article was successfully updated.' } 
     format.json { render :show, status: :ok, location: @article } 
     else 
     format.html { render :edit } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def destroy 
    @article.destroy 
    respond_to do |format| 
     format.html { redirect_to articles_url, notice: 'Article was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_article 
     @article = Article.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def article_params 
     params.require(:article).permit(:title, :specific, :category, :aka, :image1, :image2, :video1, :video2) 
    end 

    def get_query 
     @userquery = params[:q] 
    end 
end 
+0

你是什麼意思只訂購索引? – Zakwan

+0

當有人點擊「最受歡迎」鏈接時,我想按impression_count進行排序 – Kathan

+0

只是文章顯示頁面。這個方法'印象派(@article,nil,{unique:[:session_hash]})'獲得文章的查看次數。 – Kathan

回答

1

索引中的第一個else條款是這樣的:

else 
    @articles = Article.order('impressions_count ASC').page(params[:page]).per(12) 

這就是爲什麼你讓他們通過impressions_count排序。只是擺脫它返回他們排序最近。

else 
    @articles = Article.order(created_at: :desc).page(params[:page]).per(12) 

然後你需要設置你的「最流行的」鏈接返回@articles變量通過impressions_count排序爲你在你的舊代碼一樣。

你需要讓你的動作控制器返回你想要的結果,是這樣的:

一個變量添加到您的白名單:

def article_params 
    params.require(:article).permit(:title, :specific, :category, :aka, :image1, :image2, :video1, :video2, :imp_sort) 
end 

然後在你的index動作你可以添加它在:

def index 
if params[:q].present? 
    @articles = Article.search(params[:q], misspellings: {edit_distance: 1}, page: params[:page], per_page: 12) 
    @search = current_or_guest_user.searches.create!(query: params[:q], searched_at: Time.now) 
else 
    if article_params[:imp_sort] 
    @articles = Article.order('impressions_count ASC').page(params[:page]).per(12) 
    else 
    @articles = Article.order(created_at: :desc).page(params[:page]).per(12) 
    end 
    @search = current_or_guest_user.searches.create!(query: params[:q], searched_at: Time.now) 
end 
if @articles.blank? 
    return redirect_to request_path 
    @search = current_or_guest_user.searches.create!(query: params[:q], searched_at: Time.now) 
end 
get_query 

在你的index.html.erb你需要讓你的鏈接做類似:

<%= link_to "Sort by Impressions", articles_path(:imp_sort => true) %> 
+0

這正是我一直在尋找的,非常感謝。 – Kathan