【问题标题】:How do I specify column name and types while extending ActiveRecord::Base in Ruby on Rails?如何在 Ruby on Rails 中扩展 ActiveRecord::Base 时指定列名和类型?
【发布时间】:2013-10-18 18:35:27
【问题描述】:

如果我错过了一些非常琐碎的事情,请原谅我的无知,我对 RoR 很陌生。

来自 Django 背景 我记得模型是这样的

class Post(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()

明确指定列名和字段类型。

在哪里,当我写这个 rails 命令时

> rails g model Post title:string description:text

我得到的只是

class Post < ActiveRecord::Base
  attr_accessible :description, :title
end

有没有办法在扩展 ActiveRecord::Base 时写入列名和字段类型,而不是只在迁移文件中包含它们?

谢谢,感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    attr_accessible 已弃用,强大的参数替换了控制器中的功能。

    如果您想获取模型文件中的架构信息列表,您可以在文件顶部对其进行注释。这在某些时候是最佳实践,但我不认为它被使用得那么多。我个人不喜欢这样,只使用架构。

    发布最佳做法和注释: http://rails-bestpractices.com/posts/68-annotate-your-models

    自动注释的宝石: https://github.com/ctran/annotate_models

    【讨论】:

    • 你的意思是rails没有办法做到这一点,我的意思是我知道我可以发表评论,但是没有rails语法可以做到这一点?
    • 我不知道有什么方法可以做到这一点。即使有一种方法你不应该在 Rails 中这样做。这将是走出黄金之路的一步。使用迁移有什么问题?如果你真的想在模型中设置一些东西,你可以使用 alias_attribute。不过,您将需要一个已经存在的列名。别名属性 :new_column_name, :real_column_name
    【解决方案2】:

    ActiveRecord 最美妙的地方在于您不需要进行任何映射,因为所有字段都使用当前模式自动映射。当然,如果需要,可以覆盖默认映射,但是这种情况非常罕见。

    这种方法被称为“约定优于配置”并且在整个 Rails 中都存在 - 它假定您要实现的目标的最常见参数,因此它节省了大量不必要的编码和映射。一开始可能会觉得很奇怪,尤其是你需要学习如何覆盖这些默认值,但我保证当你习惯它时你会喜欢它。 :)

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2015-11-14
      • 2015-02-20
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      相关资源
      最近更新 更多