Ruby on rails finder方法的元编程

Ruby on rails finder方法的元编程,ruby-on-rails,metaprogramming,Ruby On Rails,Metaprogramming,让我们假设我在Stuff表中有一些项目。名单如下: 红蓝人,小人,大鞋,小本经营 我想使用元编程为我创建按名称查找方法 我遇到的问题是,我想使用以下名称作为方法的名称: 红气球,小球,大皮鞋,鞋带 注意:小本经营不是打字错误 以下是我开始时为您提供的一些代码: class Stuff < ActiveRecord::Base NAMES = ['RedBaloon', 'SmallBall', 'BigShoe', 'ShoeString'] validates_inclusio

让我们假设我在Stuff表中有一些项目。名单如下: 红蓝人,小人,大鞋,小本经营

我想使用元编程为我创建按名称查找方法

我遇到的问题是,我想使用以下名称作为方法的名称: 红气球,小球,大皮鞋,鞋带

注意:小本经营不是打字错误

以下是我开始时为您提供的一些代码:

class Stuff < ActiveRecord::Base

  NAMES = ['RedBaloon', 'SmallBall', 'BigShoe', 'ShoeString']
  validates_inclusion_of :name, :in => NAMES

  class << self
      NAMES.each do |n|
          define_method "#{n}" do
              find_by_kind(n)
          end
      end
  end

end

正如@apheading在他们的评论中所说,您可以使用特殊的StringUnderline方法。下面是我如何清理您的代码:

class Stuff < ActiveRecord::Base
  NAMES = ['RedBaloon', 'SmallBall', 'BigShoe', 'Shoestring']
  validates_inclusion_of :name, :in => NAMES

  class << self
    NAMES.each do |name|
      define_method name.underscore do
        find_by_kind name
      end
    end
  end
end
我不知道是否还有其他问题,因为我找不到关于validates_inclusion_的好文档,但我认为这解决了您的问题


另外,在将来,您不需要将字符串插入到相同的字符串{string}is string中,并且,因为在这些方法中字符串和符号都是有效名称,所以您不需要执行转换。即使如此,还是要使用字符串。

看起来您已经理解了元编程的概念,并且有了一个良好的开端。您是否有关于如何执行某项操作的特定问题,或者是否遇到错误?请在另一个数组中获取方法名称。如果你在唐卡斯卡住了。您可以使用下划线方法来回答它!加上它作为答案