加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 创建自定义集合方法

发布时间:2020-12-17 02:28:20 所属栏目:百科 来源:网络整理
导读:我正在尝试创建几种方法来操作对象集合. 我的控制器中有以下声明 def show @big = Configuration.find(params[:id]).elements @custombig = @big.getchanged end 在Configuration模型中,我有: require 'lib/validation_rules'class Configuration ActiveRec
我正在尝试创建几种方法来操作对象集合.

我的控制器中有以下声明

def show
    @big = Configuration.find(params[:id]).elements
    @custombig = @big.getchanged
  end

在Configuration模型中,我有:

require 'lib/validation_rules'
class Configuration < ActiveRecord::Base
  include ValidationRules

在我的lib文件夹中,我有一个名为validation_rules的文件:

module ValidationRules
  def getchanged()
    names =[]
    self.each do |pp|
      names << pp.name
      return names
    end
  end
end

这个想法很简单.相同的模型需要很多配置规则,我想要保留在控制器和模型之外(当我说了很多,我的意思是大约200).

上面代码的问题是,当我调用它时,它告诉我该方法不存在,并且似乎发生了这种情况,因为@big是一个配置数组,而不仅仅是一个配置对象.
当我在单个Configuration对象上尝试相同的方法时,它工作正常,但在这个版本中,它没有.

如何让rails将这个“自定义”方法库添加到默认的Array库中?

对于记录,上面的方法只是一个测试而不是我需要做的,代码所做的不是问题,但是Rails在抛出错误之前甚至没有查看.

非常感谢你的帮助!

解决方法

您可以扩展Enumerable模块,它包含在Array等集合类中,并定义诸如“any?”之类的方法.并’收集’.例如:

module Enumerable
  def do_something
    self.each do |item|
      yield(item)
    end
  end
end

letters = ['a','b','c']
letters.do_something { |letter| p letter }

我的do_something方法什么都不做,真的 – 称之为调用’each’.但是,当然您可以将逻辑添加到其中以实现所需的结果.

请记住,包括’Enumerable’在内的任何内容现在都有do_something方法,因此该方法应编码为与任何类型都能很好地匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读