【问题标题】:How do I create many-one relationships using Scaffold?如何使用 Scaffold 创建多对一关系?
【发布时间】:2011-02-04 05:38:53
【问题描述】:

我是 Ruby on Rails 的新手,我正在尝试创建一个低音吉他导师,以便自学 RoR(和低音吉他)。演练使用 Scaffold 创建 ActiveRecord 类,但它们似乎对应于独立表; belongs_tohas_many 没有用处。

我想创建三个类:Scale、GuitarString 和 Fret。每个音阶都有很多 GuitarStrings,每个琴弦都有很多 Frets。

如何使用 Scaffold 创建具有这种关系的类?有没有办法一次性完成,还是我需要使用 Scaffold 在不相关的状态下创建它们,然后手动添加关系?还是我应该完全放弃 Scaffold?

【问题讨论】:

  • @hobodave:silimar,是的。他在问“可以做到吗”,而我在问“这是这样做的方法吗,如果不是,怎么做?”
  • 您可能想检查我的答案中的编辑。

标签: ruby-on-rails activerecord scaffold


【解决方案1】:

几周前我开始学习 Ruby on Rails,我发现通过不使用脚手架并从命令行(或IDE 中的宏)。

但是,据我所知,当您使用脚手架生成事物时,您会将其视为生成“资源”,因此您一次只能创建一个资源,然后通过以下方式添加关系稍后再交。

但是,生成模型命令可以为您创建这些关系。假设您使用脚手架创建了 Scale 资源。

你可以这样做

ruby script/generate model GuitarString name:string scale:references 

scale:references 将在您的 GuitarString 模型上创建一个 belongs_to :scale,但您需要将 has_many :guitarstrings 添加到您的比例模型中。

generate model 命令还为您和其他需要的文件(夹具)创建迁移脚本,类似于脚手架,但不会自动创建视图或控制器或任何东西。

编辑:

这通常是您想要做的事情 - 使用 generate/model 或 generate/view 或 generate/controller 或 generate/migration。大多数 Rails 开发人员不使用脚手架,因为它的“一刀切”很少能完美地适应事物。但是,大多数 Rails 开发人员确实使用我提到的生成命令 - 它可以节省手动创建帮助程序和固定装置的时间,并且它为每个文件提供了一个可以添加的基本模板。

像 JetBrain 的 RubyMine 之类的几个 Ruby IDE 具有基本上执行这些命令的宏。在 RubyMine 中你可以 ctrl+alt+g,然后输入另一个对应于你要生成的键。

如前所述,belongs_to 关系可以通过使用“references”一词来生成。其他您将手动添加。

【讨论】:

    猜你喜欢
    • 2020-10-27
    • 2023-03-16
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2017-07-01
    • 2016-02-02
    • 2011-07-09
    相关资源
    最近更新 更多