创建没有“漂亮的生成器”rails的数据库字段

时间:2015-02-04 06:01:19

标签: ruby-on-rails orm rails-generate

Rails有没有办法操纵数据库字段和相应的访问方法没有“漂亮的生成器”?

我希望用户在有特权的情况下能够操纵数据库结构,即至少添加或删除列。特权用户应该可以“添加新”一些列。

说我有一个对象/表格artist,它应该“动态”接收列作为“出生日期”,“已玩过”,“已售出的副本”


不确定它是不是重复。需要做出初步决定 Rails是否阻止让用户执行 o以开头。 (如果是这种情况=>肯定是一些noSQL解决方案)

在纯ruby中,至少可以轻松地将属性动态添加到现有的模型/类中,如此

Test.class_eval do; attr_accessor "new_attribute"; end

Test.new.new_attribute = 2 将按预期返回=> 2

为了创建或操作自定义输入掩码/模型:我是否可以手动以与生成器相同的方式运行,并手动调用ActiveRecord::Migration等方法add_column以及为ORM创建getter / setter-methods?

如果是或否,在两种情况下,它们都是从哪开始的?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道允许Object动态创建新列的任何优雅方式。这不是一个好的应用程序设计,会导致数据库的低效率。

您可以在Rails中使用ActiveRecord associations实现类似的功能。这是使用相关属性表的Artist模型的简单示例。

class Artist < ActiveRecord::Base
  has_many :attributes
end

class Attribute < ActiveRecord::Base
  belongs_to :artist
end

通过此关联,您可以允许Artist类创建/编辑/销毁属性。 ActiveRecord将使用数据库中的外键来跟踪两个模型之间的关系。

如果这对您不起作用,那么您的下一个最佳选择是查看NoSQL数据库,例如MongoDB,这样可以在架构中提供更大的灵活性。使用NoSQL,您可以在没有预定义模式的情况下方便地插入数据。