ruby-on-rails - 动态创建类

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-5

我有以下代码:

module City
  class Bus < Base
  end

  class BusOne < Bus; end
  class BusTwo < Bus; end
  class BusSixty < Bus; end
  ....
end

我的目标是动态创建此类:

  class BusOne < Bus; end
  class BusTwo < Bus; end
  class BusSixty < Bus; end
  ...

这就是我尝试的原因:

module City
  class Bus < Base
    DIVISON = [:one, :two, :sixty]
  end

  ....
  Bus::DIVISONS.each do |division|
    class "Bus#{division.capitalize}".constantize < Bus; end
  end
end

但我收到此错误:

unexpected '<', expecting &. or :: or '[' or '.' (SyntaxError)

我做错了什么? 谢谢

最佳答案

这是 John 答案的变体,主要是为了表明 send 的使用不是必需的。

module City
  class Bus
    def i_am
      puts "this is class #{self.class}"
    end
  end
end

["BusOne", "BusTwo", "BusSixty"].each do |class_name|
    City.const_set(class_name, Class.new(City::Bus))
end

City::BusOne.new.i_am
this is class City::BusOne

City::BusTwo.new.i_am
this is class City::BusTwo

City::BusSixty.new.i_am
this is class City::BusSixty

关于ruby-on-rails - 动态创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46570220/

相关文章:

ruby-on-rails-3 - 托管 5 个 Ruby on Rails 3 应用程序需要多少 CPU/RAM?

python - 如何创建脚本来运行终端命令?

ruby-on-rails - 使用 aws-sdk for ruby​​ in rails 下载 S3 文件(对象)

ruby-on-rails - RoR rspec 测试失败,错误为 <top (required)> 中的“block (2 levels)”

mysql - 从不同模型的 Controller 更新一个模型的属性

ruby - 在 Ruby DBI 中连接到远程数据库

ruby-on-rails - 在 Rails 中使用 Ajax 更新 Div 而无需重新加载页面

在同一条目上并行更新的 Mysql 锁(使用 sidekiq)

ruby-on-rails - Ruby on Rails 中的自定义 getter

ruby-on-rails - 使用 beginning_of_month 时 Rails 5 中的时区