Rails迁移表

时间:2013-03-02 18:43:20

标签: ruby-on-rails

据我所知,您在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,但是如果我不希望我的迁移文件被替换,因为我在文件中指定了我的字段数据类型呢?

3 个答案:

答案 0 :(得分:3)

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

  

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

是的,你对此是正确的。字段数据类型不会显示在模型内部,仅在迁移中显示。

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

rails g model User first_name:string last_name:string

这将创建一个名为User的模型,以及一个将创建包含字段idfirst_namelast_name和时间戳字段的用户表的迁移。如果你想稍后添加或删除列,那就有一个很好的技巧;跑吧

rails g migration add_fields_to_users field_name:field_type

rails g migration remove_fields_from_users field_name

根据您的意愿替换field_namefield_typeusers。此命令将为您创建一个用于添加或删除字段的迁移,因此您无需手动编写这些字段。

  

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

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

  

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

你也不是。您只需运行rake db:migrate,如果出现故障,它会告诉您何处和原因。如果您的模型有语法错误,它会告诉您何时启动服务器,或运行测试时,或者至少在某处使用它时(例如,当您调用模型的方法时)。如果您的意思是如何验证模型的数据,这是另一个问题 - 请参阅this guide to active record validations and callbacks,其中详细说明了检查存在性,唯一性,长度等的验证。

答案 1 :(得分:2)

你问过几个问题,让我们逐个问:

  

据我所知,您可以在其中指定模型字段数据类型   数据库/迁移。这对我来说是新的,就像Django一样,你可以直接   在Model类中指定模型字段数据类型。我对么   想到这个?这是铁轨上的常见做法还是我   只是使用一种解决方法?

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

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

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

  

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

您需要在模型中指定您的关系(或关联)。阅读this,因为它得到了很好的解释。但是考虑到在迁移中,您必须做一些工作来创建关联,因为您可能需要为多对多关联创建连接表,或者创建一个引用has_many关联的另一个表的列。

  

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

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

答案 2 :(得分:1)

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

在您的模型中,您可以为您的表定义关系belongs_tohas_many等以及您的scopes,并为您的模型定义方法。您的模型继承您的表列,以便您可以直接访问它们。

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

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