Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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_Ruby - Fatal编程技术网

Ruby on rails rails中部分文件中变量的范围

Ruby on rails rails中部分文件中变量的范围,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想在控制器中定义的部分文件中使用columns实例变量,它正在工作,但我想知道是否有更好的方法来实现它 控制器: def index ### code here #### @columns= [] Model.column_names.each do |col| cnd = "#{col}" if cnd == 'id' || cnd == 'abc_id' || cnd == "created_at" || cnd =="updated_at

我想在控制器中定义的部分文件中使用columns实例变量,它正在工作,但我想知道是否有更好的方法来实现它

控制器:

def index
     ### code here ####
    @columns= []
    Model.column_names.each do |col|
      cnd = "#{col}"
      if cnd == 'id' || cnd == 'abc_id' || cnd == "created_at" || cnd =="updated_at"
         next
      end
        @columns << cnd
    end
  end
在部分文件中:\u部分

    - columns.each do |cols|
      %tbody
        %td #{cols}
        %td

可以在控制器中进行一次重构:

def index
  reject_columns = ["id", "abc_id", "created_at", "updated_at"]
  @columns = Model.column_names.reject{ |c| reject.include?(c)  }
end

对于_partial重构,您可以直接使用_partial中的@columns,不需要传递局部变量,因为它是一个实例变量。如果愿意使用部分名称,可以使用集合的呈现。请参见

中的呈现集合部分。您可以访问部分中的实例变量,即直接访问index.html.haml中的@columns,而无需将其作为本地变量传入。然而,似乎你不应该。所以就实例变量的使用而言,我相信您当前的行为是正确的,尽管您的控制器代码可以进行重构以保持整洁

def index
  reject_columns = ["id", "abc_id", "created_at", "updated_at"]
  @columns = Model.column_names.reject{ |c| reject.include?(c)  }
end