访问父控制器中的helper_method

时间:2017-01-03 11:27:52

标签: ruby-on-rails ruby

我有一个名为AdminController的控制器,代码如下:

module Admin
  class AdminController < ApplicationController

    helper_method :sort_column, :sort_direction

    private

    def sort_column(object, column)
      object.column_names.include?(params[:sort]) ? params[:sort] : "#{column}"
    end

    def sort_direction
      %w[asc desc].include?(params[:direction]) ? params[:direction] : "desc"
    end

  end
end

然后在另一个名为ArticlesController的控制器中我有这个代码:

module Admin
  class ArticlesController < AdminController

    def index
      @articles = Article
                      .where(status: params[:status].present? ? params[:status] : 1)
                      .order(sort_column(Article, 'publish_date') + ' ' + sort_direction)
    end

  end
end

它应该使用父控制器中的那些辅助方法进行排序,但是我收到错误:wrong number of arguments (0 for 2)这一行:def sort_column(object, column)

我还应该提一下,我使用帮助器进行排序:

module ApplicationHelper

  def sortable(column, title = nil)
    title ||= column.titleize
    css_class = (column == sort_column) ? "current #{sort_direction}" : nil
    direction = (column == sort_column && sort_direction == "asc") ? "desc" : "asc"
    link_to title, {:sort => column, :direction => direction}, {:class => css_class}
  end

end

因此我使用helper_method。

1 个答案:

答案 0 :(得分:0)

ApplicationHelper#sortable在没有参数的情况下调用sort_columnAdminController#sort_column需要两个参数(objectcolumn),因此例外。

要解决此问题,您可以删除所需的参数或更改#sortable以使用它们。这里我不知道最好的选择是什么,也许是使用类属性而不是#sort_column的参数。