产生从内码一个Rails模型(调用来自控制器发生器)(Generate a Rails model

2019-10-21 09:28发布

我有一个特别需要能够从内部代码(当一些动作发生IE)调用Rails的命令。 我需要一个模型与特定字段(其将通过形状来确定)来创建并运行在端所生成的迁移。

因此,这种形式我会创造的所有字段,然后将导致与创建一个模型与它的某些领域(表和列)

因此,有一种方法来调用rails generate model NAME [field[:type][:index] field[:type]bundle exec rake db:migrate从控制器/红宝石代码内?

Answer 1:

而不是每个类别的一个表,这里有一个更关系数据库-Y的方法:

create table category (
    id serial primary key,
    name text not null
);

create table attribute (
    id serial primary key,
    name text not null
);

create table item (
    id serial primary key,
    category_id integer not null references category (id),
    description text
);

create table category_attribute (
    attribute_id integer not null references attribute (id),
    category_id integer not null references category (id)
);

create table item_attribute (
    attribute_id integer not null references (attribute.id),
    item_id integer not null references item (id),
    value text
);

当你创建一个类,你在存储它的名字(以及任何其他一到一个属性) category表。 您确保attribute表中有一个条目每个属性的类别有,然后用category_attribute表的属性链接到该类别。

当您添加一个类别中的新成员,您可以使用item表的主要事情存储有关项目和item_attribute表来存储它的每一个属性的值。 因此,与汽车和宠物接近你提到,你的数据库可能看起来像

category
 id | name
----+------
  1 | car
  2 | pet

attribute
 id |    name
----+------------
  1 | make
  2 | breed
  3 | model_year
  4 | name

category_attribute
 attribute_id | category_id
--------------+-------------
            1 |           1
            2 |           2
            3 |           1
            4 |           2

item
 id | category_id |  description
----+-------------+----------------
  1 |           1 | Hyundai Accent
  2 |           2 | Fuzzy kitty

item_attribute
 attribute_id | item_id |  value
--------------+---------+---------
            1 |       1 | Hyundai
            3 |       1 | 2007
            2 |       2 | DSH
            4 |       2 | Sam

这种方法可以感觉相当不明显的,因为它不符合你使用Rails模型使用风格“与许多因素之一对象”。 这是关系型数据库是如何工作的,但是。 我相信有一些神奇的ActiveRecord你可以做,使对象/关系的翻译多一点自动的,但我不记得它叫什么的时刻。



文章来源: Generate a Rails model from within code (invoke generator from a controller)