【问题标题】:Access helper_method in parent controller在父控制器中访问 helper_method
【发布时间】: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


【解决方案1】:

ApplicationHelper#sortable 不带参数调用sort_columnAdminController#sort_column 需要两个参数(objectcolumn),因此例外。

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

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2015-07-14
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多