Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails从库导入类方法_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails从库导入类方法

Ruby on rails Rails从库导入类方法,ruby-on-rails,Ruby On Rails,我似乎不明白为什么这行不通 我在lib中有一个类,其中包含以下代码: class SortMethods def initialize(direction, sort) @mydirection = direction @mysort = sort end def sort_column(table, field) table.column_names.include?(@mysort) ? @mysort : field end def s

我似乎不明白为什么这行不通

我在lib中有一个类,其中包含以下代码:

    class SortMethods
  def initialize(direction, sort)
    @mydirection = direction
    @mysort = sort
  end
  def sort_column(table, field)
    table.column_names.include?(@mysort) ? @mysort : field
  end

  def sort_direction
    %w[asc desc].include?(@mydirection) ? @mydirection : "asc"
  end
end
    class TrucksController < ApplicationController
  # GET /trucks
  # GET /trucks.json
  require 'sort_methods'
  helper_method :sort_column, :sort_direction
  def index
    search = params[:search]
    msm = SortMethods.new(params[:direction], params[:sort])
    @trucks = Truck.search(search).order(msm.sort_column(Truck, "truck_no") + " " + msm.sort_direction)

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @trucks }
    end
  end
end
在我的卡车控制器中,我有以下代码:

    class SortMethods
  def initialize(direction, sort)
    @mydirection = direction
    @mysort = sort
  end
  def sort_column(table, field)
    table.column_names.include?(@mysort) ? @mysort : field
  end

  def sort_direction
    %w[asc desc].include?(@mydirection) ? @mydirection : "asc"
  end
end
    class TrucksController < ApplicationController
  # GET /trucks
  # GET /trucks.json
  require 'sort_methods'
  helper_method :sort_column, :sort_direction
  def index
    search = params[:search]
    msm = SortMethods.new(params[:direction], params[:sort])
    @trucks = Truck.search(search).order(msm.sort_column(Truck, "truck_no") + " " + msm.sort_direction)

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @trucks }
    end
  end
end
class TrucksController
我不明白的是我做错了什么,我已经尝试了这篇文章中的所有建议,另一个人也有同样的问题,但它不起作用。我做错了什么

职位:


我应该补充一点,我也尝试过添加.self,但它仍然不起作用。

看看你的错误<代码>未定义的局部变量或#的方法“params”

这意味着
SortMethods
正在尝试调用
params[]

只有控制器才能访问
params
对象

在SortMethods类中,确保没有调用
params
对象。如果您需要来自web的参数,请将其作为参数传递给您的方法之一。像这样的东西会有用的

class SortMethods
  def initialize(param)
    @param = param
  end

  def sort_column(table, field)
    puts @param
  end

  def sort_direction
    #some action
  end
end
然后在控制器中

def index
  msm = SortMethods.new(params[:something])
  ...
end

从概念上讲,您可以传递整个
params
对象,但您不希望这样,因为您应该只获取所需的内容。

问题不在于它没有正确导入类。请看错误的这一部分:

#<SortMethods:0x2224008>
#
这表示SortMethods的一个实例,这意味着它已正确导入和实例化。错误告诉您的是,SortMethods类没有名为params的属性或方法,这意味着在SortMethods中定义的这两个方法的代码中,您试图使用params,这是一个控制器属性,在其他任何地方(视图中除外)都无法访问


编辑:如果需要访问params散列中的某些内容,则必须修改方法以获取参数,然后调用它们,并将所需的参数作为参数从params散列中传递,然后像往常一样在函数中使用它们。

请显示sort_列的代码。您正在尝试访问其中的params散列吗?您正在调用
SortMethods
类上的
params
。您没有将其传递给
新建
排序列
方法。@MurifoX我不太明白您所说的,我该如何解决这个问题,您是否可以发布一个答案?我是rails的新手,正在努力学习如何正确地完成所有这些。你能发布你的
sort\u列
方法的内容吗?我编辑了我的答案,以包含解决方案,而不仅仅是解释你的错误。
Truck.search
不是问题,要么是
sort\u列
要么是
sort\u方向
我尝试了你的方法,但我得到了相同的错误。我编辑了我的代码,把所有的东西都给了你。还有一个helper方法,但我认为你不需要它,是吗?我之所以在lib中有这个类,是因为我将从不同的控制器调用它大约20次。他们都有自己的桌子,比如卡车公司的司机等等。。。所以我不能总是叫卡车。列名。。。。它随每个控制器而变化。我试图通过参数传递那个卡车,这样我就可以在libI更新我的代码中使用它来显示所有方法,从你所说的一切我相信问题就在那里,但是我仍然不太明白如何解决它。很简单,我想问题是你来自php或其他一些过程语言。在ruby中,以及在每一种面向对象的高级语言中,并不是所有变量都可以在任何地方使用。params[]是在控制器内定义的哈希。如果从控制器调用其他对象,则此其他对象(在您的示例中为SortMethods)无权访问控制器中的任何内容,包括params[]散列。只有作为参数传递的内容才是。就像将表和字段作为参数传递以使其可用于sort_column方法一样,也传递params!我来自java和c#以及asp.net和AJAX。我用java做过OOP和MVC,我了解了一般的概念,rails的最大问题是理解我在哪里可以访问什么,我想如果我能做到这一点,我会用ruby和rails做得很好。谢谢你的解释。那我不明白你怎么不明白。如果您尝试执行此处的操作,您提到的所有语言(AJAX不是语言btw)都会抛出相同的错误。params散列是控制器对象的属性。如果调用SortMethod对象,则无法访问控制器属性,它们不在其范围内。到底是什么让你困惑?