0

据我所知,您在 db/migrations 中指定了模型字段数据类型。这对我来说是新的,因为在 Django 中,您可以直接在 Model 类中指定模型字段数据类型。我这样想对吗?这是rails中的常见做法还是我只是在使用解决方法?

另外,如何在这个 db/migrations 文件中指定表关系。例如,如果我有一个名为 A 类的模型。

我有另一个名为 B 类的模型,我希望与 A 类建立一对多的关系。我只是这样做

class ClassA < ActiveRecord::Migration
  def change
    create_table :projects do |t|
      t.classB :name
    end
  end
end

如何验证我的迁移文件和模型文件没有任何语法错误。据我所知,我只是运行 rake db:migrate,但是如果我不希望在文件中指定我的字段数据类型时替换我的迁移文件怎么办?

4

3 回答 3

3

好的,总而言之,您似乎有三个问题:

1.:据我所知,您在 db/migrations 中指定了模型字段数据类型。[...] 我的想法正确吗?这是rails中的常见做法还是我只是在使用解决方法?

是的,你是对的。字段数据类型不会显示在模型内部,只会在您的迁移中显示。

顺便说一句:我很少发现自己手动编写迁移文件。如果你使用 rails 命令,它会自动生成迁移文件。例如,如果您使用

rails g model User first_name:string last_name:string

这将创建一个名为 User 的模型,以及一个将创建一个包含 fields idfirst_namelast_name和 timestamp 字段的 users 表的迁移。如果您想稍后添加或删除列,有一个绝妙的技巧;赶紧跑

rails g migration add_fields_to_users field_name:field_type

或者

rails g migration remove_fields_from_users field_name.

替换field_name,field_typeusers你认为合适的。此命令将为您创建迁移以添加或删除字段,因此您不必手动编写这些。

2.:另外,你如何在这个 db/migrations 文件中指定表关系。

你没有。Rails 通过 has_many、belongs_to、has_and_belongs_to 等关联方法为您处理此问题。请查看此 rails guide to active record associations。您需要在数据库端做的一件事是为一对多关系添加 foreign_id 列或为多对多关系创建连接表。例如,如果您有一个用户表和一个图片表,并且每张图片都属于一个用户,那么在您的用户模型中您将编写has_many :pictures,在您的图片模型中您将编写belongs_to :user,并且在您的图片表中您需要一个user_id名为整数类型。

3.:如何验证我的迁移文件和模型文件没有任何语法错误。

你也没有。你只需运行rake db:migrate,如果出现故障,它会告诉你在哪里以及为什么。如果你的模型有语法错误,它会告诉你什么时候启动你的服务器,或者什么时候运行你的测试,或者至少什么时候你在某个地方使用它(例如,当你调用一个模型的方法时)。如果您的意思是如何验证模型的数据,这完全是另一个问题 - 请参阅本指南活动记录验证和回调,其中详细解释了检查存在性、唯一性、长度等的验证。

于 2013-03-02T18:57:56.307 回答
2

你问了几个问题,我们来一一解答:

据我所知,您在 db/migrations 中指定了模型字段数据类型。这对我来说是新的,因为在 Django 中,您可以直接在 Model 类中指定模型字段数据类型。我这样想对吗?这是rails中的常见做法还是我只是在使用解决方法?

迁移用于更改数据库。迁移示例:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.text :description
    end
  end
end

运行此程序时,您将创建一个带有名为 name 的字符串字段的表 products。所以,是的,您在迁移中指定模型字段数据类型。

另外,如何在这个 db/migrations 文件中指定表关系。例如,如果我有一个名为 A 类的模型。

您需要在模型中指定您的关系(或关联)。读这个,因为它解释得很好。但是要考虑到,在迁移中,您必须以某种方式创建关联,因为您可能需要为多对多关联创建连接表,或者为 has_many 关联创建引用另一个表的列。

如何验证我的迁移文件和模型文件没有任何语法错误。据我所知,我只是运行 rake db:migrate,但是如果我不希望在文件中指定我的字段数据类型时替换我的迁移文件怎么办?

我不确定你在这个问题中的意思。

于 2013-03-02T18:59:30.853 回答
1

当您创建一个新模型时,rails 会创建您的 shema 迁移文件和您的模型。在迁移文件中,您指定列。可以在这里添加一些代码,但你应该尽可能少做。对于向上和向下,您可以在此处添加/删除列,添加数据库索引等。

在您的模型中,您定义您的关系belongs_tohas_many等,以及您scopes的表和模型的方法。您的模型继承了您的表格列,因此您可以直接访问它们。

我不知道Django,这是rails中的常见做法。

您可以在此处查看关系和其他好的信息:http ://www.tutorialspoint.com/ruby-on-rails/rails-models.htm

于 2013-03-02T18:52:10.807 回答