【问题标题】:Rails - generate Scaffold with Table OptionsRails - 使用表格选项生成脚手架
【发布时间】:2013-01-30 22:10:03
【问题描述】:

我上周开始学习 Ruby,今天开始学习 Rails,请耐心等待。 我看到 Rails 带有生成器,允许您生成模型/控制器甚至模型+控制器+视图捆绑作为“脚手架”。这是我感兴趣的。

但是,我有一个问题。如何设置列的数据库选项?

例如。要生成用户表,我会这样做:

rails g scaffold users uuid:binary name:string email:string password:binary registered_on:date number:integer default:string

现在,如果我是个正直的人,并且对仅在模型/控制器中进行验证不满意,但又想做数据库级别的限制,该怎么办。 如果我希望 email 最多 50 个字符,number 自动递增,并且所有字段都不允许为 NULL,default 字段必须默认为“foo”,该怎么办。有没有办法将这些要求传递给生成器命令?

我知道可以在 rake db:migrate 中使用的 .rb 文件中设置这些选项,但是使用 1 个命令传递值会更容易。

【问题讨论】:

  • 不要使用 'default' 或 'is_default' 作为列名。这可能会导致问题,具体取决于您使用的数据库类型。另一个以防万一:使用 'locked' 或 'is_locked' 也不是一个好主意。
  • 谢谢,我通常远离这样的名字,我只是在撰写本文时找不到更原始的名称。

标签: ruby-on-rails ruby


【解决方案1】:

至少有些东西是可用的,比如字符串长度,但不确定其他的。

rails g scaffold users email:string{50}

【讨论】:

  • 最佳做法是说您的默认值进入您的迁移文件。正如 Dave Newton 所示,您可以在 generate 方法中设置一些默认值,这将在它生成的迁移文件中设置默认值。
  • @Dogweather 我什至不记得我是怎么知道这件事的。
【解决方案2】:
  1. 在花括号之间使用类型修饰符,例如:

    rails generate migration AddDetailsToProducts price:decimal{5,2} 
    

    更多信息:migrations

  2. 使用脚手架并获取通用迁移文件。而且,正如您所提到的,在那里进行自定义。此文件位于db/migrate

完成自定义字段后,别忘了发送rake db:migrate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2012-12-11
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多