我将尝试以最好的方式解释这一点......所以我们走了......
这是卡车的旧(工作)控制器。它的作用是按列和asc / desc命令排序,按预期工作。
class TrucksController < ApplicationController
# GET /trucks
# GET /trucks.json
require 'sort_methods'
helper_method :sort_column, :sort_direction
def index
@trucks = Truck.search(params[:search]).order(SortMethods.sort_column(Truck, "truck_no", params[:sort]) + " " + SortMethods.sort_direction(params[:direction]))
respond_to do |format|
format.html # index.html.erb
format.json { render json: @trucks }
end
end
private
def sort_column
Truck.column_names.include?(params[:sort]) ? params[:sort] : "truck_no"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end
end
据我所知,这里调用了helper_method,这样当没有参数传递页面时,它有一个默认值可以恢复,下面的排序方法是导致默认行为的方法。所有这些都按预期工作,我可以加载页面并进行排序。
现在,@ truck正在调用lib中的一个类,它与sort_methods具有相同的方法,因为我多次调用这些方法,而我正在尝试干这个代码。这样做仍然是因为我以这种方式完成了课程:
class SortMethods
def self.sort_column(table, field, sort)
table.column_names.include?(sort) ? sort : field
end
def self.sort_direction(direction)
%w[asc desc].include?(direction) ? direction : "asc"
end
end
好吧所以这样的代码按预期工作,问题是我在我的控制器和SortMethods类中重复排序方法两次。我想要做的是使用SortMethods设置帮助程序类的默认值,但如果我尝试使用此代码调用它:
helper_method :SortMethods.sort_column(Truck, "truck_no", params[:sort]), SortMethods.sort_direction(params[:direction])
我收到以下消息:
undefined local variable or method `sort_column' for #<#<Class:0x1a3a780>:0x1852f08>
我的假设是我传递的变量之一是零,我无法弄清楚哪一个以及如何避免这个问题?如果没有设置参数,是否有另一种方法可以默认为此。我也试过在索引中移动帮助器,但这给了我这个错误:
undefined method `sort_column' for :SortMethods:Symbol
答案 0 :(得分:2)
Helper_method使得给定方法可以在控制器视图中访问。因此,您不需要将这些SortMethods方法指定为帮助程序,因为它们不是控制器的一部分。你应该可以在像
这样的视图中调用它们SortMethods.sort_column(blah)
另外,你在哪里定义SortMethods类?如果它位于app文件夹中的任何位置的sort_methods.rb文件中,您可以跳过顶部的require,因为rails会自动搜索它(它是constant_missing方法的一部分)