我有一个索引视图,它变得有点笨重,所以我将所有数据库查询移到演示器中以尝试清理。
但是,将 params[:something] 与任何查询一起使用会使演示者错误:
undefined local variable or method params for QuestionPresenter:0x007fd6d569c158
我尝试将参数移动到应用程序控制器和模型中的辅助方法中,但没有成功。
我怎样才能让演示者可以使用这些参数?还是演示者不打算处理这些参数?
老问题_controller.rb
def index       
   if params[:tag]
      @questions = @question.tagged_with(params[:tag]).paginate(page: params[:page], per_page: 20)
    elsif params[:search]
      @questions = @question.paginate(page: params[:page], per_page: 20).search(params[:search])
    else
      @newest = @questions.newest.paginate(page: params[:page], per_page: 2)
      @unanswered = @question.unanswered.paginate(page: params[:page], per_page: 2).search(params[:search])
      @votes = @question.by_votes.paginate(page: params[:page], per_page: 2).search(params[:search])
  end 
end
QuestionsController.rb(新索引操作)
def index
  @presenter = QuestionPresenter.new
end
question_presenter.rb
class QuestionPresenter
  def initialize
    @questions = Question
    @tags = Tag
  end
  def questions
    @questions.paginate(page: params[:page], per_page: 20).search(params[:search])
  end
  def tags
   @tags.joins(:taggings).select('tags.*, count(tag_id) as "tag_count"').group(:tag_id).order(' tag_count desc')
  end
  def tagged_questions
    @questions.tagged_with(params[:tag])
  end
  def newest
    @questions.newest.paginate(page: params[:page], per_page: 20)
  end
  def unanswered
    @questions.unanswered.paginate(page: params[:page], per_page: 20)
  end
  def votes
    @questions.by_votes.paginate(page: params[:page], per_page: 20)
  end
end
index.html.erb
<%= render partial: "questions/tag_cloud", locals: {tags: @presenter.tags} %>
<% if params[:search] %> 
  <%= render partial: "questions/questions", locals: {questions: @presenter.questions} %>
<% elsif params[:tag] %>
  <%= render partial: "questions/questions", locals: {questions: @presenter.tagged_questions}%>
<% else %>
  <%= render partial: "questions/tabbed_index", locals: {questions: @presenter.newest, unanswered: @presenter.unanswered, votes: @presenter.votes} %>
<% end %>