我有一个名为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。
答案 0 :(得分:0)
ApplicationHelper#sortable
在没有参数的情况下调用sort_column
。 AdminController#sort_column
需要两个参数(object
和column
),因此例外。
要解决此问题,您可以删除所需的参数或更改#sortable
以使用它们。这里我不知道最好的选择是什么,也许是使用类属性而不是#sort_column
的参数。