Rails多个索引页面

时间:2015-12-23 23:21:20

标签: ruby-on-rails model-view-controller controller

我有一个模型调用问题,我需要2个索引页面。一个针对所有问题,一个针对所有正式问题(仅针对我的专栏“官方”的问题)。我该怎么做呢到目前为止,我只有一个返回所有问题的索引

    def index 
        @questions = Question.paginate(page: params[:page], per_page: 3)
    end

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解,这就是为什么我会建议两种方式:

1)您可以拥有2个不同的网址和视图 - 一个用于所有问题,一个用于官员

def index 
    @questions = Question.paginate(page: params[:page], per_page: 3)
end

def official 
    @questions = Question.where(official: true).paginate(page: params[:page], per_page: 3)
end

2)如果你想在一个页面中呈现两个列表:

def index 
    @all_questions = Question.paginate(page: params[:page], per_page: 3)
    @official_questions = Question.where(official: true).paginate(page: params[:page], per_page: 3)
end

答案 1 :(得分:0)

我觉得你很困惑。

您可以使用一个 index方法&视图。您可能有不同的选项,但最终,您将拥有一种方法,您可以根据发送的请求填充该方法:

#config/routes.rb
resources :questions do
   get :official, to: :index, on: :collection, official: "true" #-> url.com/questions/official
end

#app/controllers/questions_controller.rb
class QuestionsController < ApplicationController
   def index
      if params[:official]
         @questions = Question.where(official: true)
      else
         @questions = Question.all
      end
      @questions = @questions.paginate(page: params[:page], per_page: 3)
   end
end

然后你会使用:

#app/views/questions/index.html.erb
<%= render @questions %>

#app/views/questions/_question.html.erb
<%= question.title %>

你不需要partial(我喜欢它,因为它会模仿你正在做的事情) - 需要注意的重要一点是,你基本上每次填充@questions - index视图仅用作查看其中包含的数据的方式。

因此,您不需要两种索引方法 - 可以设置自定义链接并在控制器中使用一些条件逻辑来确定要使用的数据。