据我所知,您在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,但是如果我不希望我的迁移文件被替换,因为我在文件中指定了我的字段数据类型呢?
答案 0 :(得分:3)
好的,总而言之,你似乎有三个问题:
1:据我所知,您在db / migrations中指定了模型字段数据类型。 [...]我在考虑这个问题时是否正确?这是rails中的常见做法,还是我只是在使用解决方法?
是的,你对此是正确的。字段数据类型不会显示在模型内部,仅在迁移中显示。
顺便说一句:我很少发现自己手动编写迁移文件。如果使用rails命令,它将自动生成迁移文件。例如,如果您使用
rails g model User first_name:string last_name:string
这将创建一个名为User的模型,以及一个将创建包含字段id
,first_name
,last_name
和时间戳字段的用户表的迁移。如果你想稍后添加或删除列,那就有一个很好的技巧;跑吧
rails g migration add_fields_to_users field_name:field_type
或
rails g migration remove_fields_from_users field_name
。
根据您的意愿替换field_name
,field_type
和users
。此命令将为您创建一个用于添加或删除字段的迁移,因此您无需手动编写这些字段。
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_to
,has_many
等以及您的scopes
,并为您的模型定义方法。您的模型继承您的表列,以便您可以直接访问它们。
我不知道Django,这是rails中的常见做法。
你可以在这里查看关系和其他好的信息:http://www.tutorialspoint.com/ruby-on-rails/rails-models.htm