【发布时间】:2017-01-03 11:27:51
【问题描述】:
我有一个名为 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。
【问题讨论】:
-
..在哪一行?你有堆栈跟踪吗?
-
在 app/controllers/concerns/ 中定义模块中的方法,并将该模块包含在所需的控制器中。
-
@DamienRoche 添加了中断的行。
-
原因是你不能为
helper_method..stackoverflow.com/questions/18102185/…使用参数 -
@prasad.surase 如果我将其移至关注点,我的助手如何也访问它?
标签: ruby-on-rails ruby