RubyonRails上的数据映射

RubyonRails上的数据映射,ruby,perl,frameworks,rails-activerecord,dbix-class,Ruby,Perl,Frameworks,Rails Activerecord,Dbix Class,ActiveRecord是否有办法捕获所有数据库字段,包括Pks和FKs?就像ORM DBIx::Class脚本在Catalyst上所做的那样 以下是对此的简要描述: 使用Catalyst“\u create.pl”脚本生成模型 脚本: $ rm lib/MyApp/Model/DB.pm $ script/myapp_create.pl model DB DBIC::Schema MyApp::Schema \ create=static components=TimeStamp,Pass

ActiveRecord是否有办法捕获所有数据库字段,包括Pks和FKs?就像ORM DBIx::Class脚本在Catalyst上所做的那样

以下是对此的简要描述:

使用Catalyst“\u create.pl”脚本生成模型

脚本:

$ rm lib/MyApp/Model/DB.pm 

$ script/myapp_create.pl model DB DBIC::Schema MyApp::Schema \ create=static components=TimeStamp,PassphraseColumn \ 'dbi:Pg:dbname=catappdb' 'catappuser' 'catalyst' '{ AutoCommit => 1 }'
更多详情

因此,我需要能够使用sql创建数据库,然后运行一个脚本,以便Rail的ORM ActiveRecord映射所有表和关系


(很抱歉我的英语不好:3)

您必须在ActiveRecord模型中声明您的关系,就像您必须在DBIx::Class中声明关系一样。如果不在模型类中声明FK,DBIx::Class和ActiveRecord都不知道FK的任何信息。

Rails默认会这样做吗?无需运行任何脚本,但请注意,不应使用纯sql-use迁移更新数据库。使用DBIx::Class不需要catalyst。询问者指的是在现有数据库架构上生成基本ORM文件和关系的能力。这是一个相当常见的ORM特性。例如,DBIx::Class允许从定义的ORM类文件创建DB模式,或者相反,通过读取DB模式并从中创建类文件来创建ORM类文件,关系由以下外键约束定义。我不记得DBIC::schema::Loader为我生成关系语句。这并不是说它不适合我使用它的时候。Rails生成器从未将关系添加到我的模型在我的特定实例(Percona MySQL使用InnoDB)中,我处理关系的首选方法是创建外键约束,然后重新运行dbicdump,我每隔一两周就会这样做,所以我知道它是有效的。可能不是所有RDBMS都完全实现了支持。但问题是活动记录,活动记录偏向于在应用程序中维护关系,而不是通过FK。这是因为,如果FKs不倾向于跨服务器,那么如果您共享数据,则一个碎片上的一行通常不能在任何其他碎片上具有相关行。对相关数据进行分组通常是好的,但它也会限制并行性。我只是在评论您的断言“如果您不在模型类中声明FK,则DBIx::Class和ActiveRecord都不知道FK的任何信息”,在DBIx::Class方面有更具体的信息。类还允许手动定义关系,或两者的组合(我使用)。生成的文件包含
#请勿修改此文件或以上任何内容!md5sum:PqQ8s2YshkI0T6s1Avqnbw
之后,您可以放置自己的定义数据、方法等。我同意,被迫依赖FK建立关系太过拘束。