迁移文件更改时需要更改模型吗?

Models need to be changed when migration files are changed?

我是 Rails 的新手,目前对于我们的 class,我们必须创建一个带有数据库的应用程序。

我有一堆表有其他表的外键,我已经在迁移文件中定义了这些关联(使用 execute("ALTER TABLE...")),但在我的模型中没有(我只有 self.primary_key 在我的模型中定义)。

我的问题是,既然我在迁移中设置了这些关联,我是否还必须在我的模型中设置关联(即 has_may, belongs_to, validates_uniqueness_of 等)?

我将创建一个允许用户输入的应用程序,这些输入将被插入到数据库中。

希望能解开我的困惑。谢谢!

例子

迁移文件:

class CreateSchools < ActiveRecord::Migration[5.0]
  def up
    create_table :schools, {:id => false} do |t|
      t.integer :school_id
      t.string :school_name
      t.string :contact_number
      t.integer :a_id

      t.timestamps
    end
    execute "ALTER TABLE schools ADD PRIMARY KEY(school_id);"
    execute "ALTER TABLE schools ADD CONSTRAINT a_id UNIQUE(a_id);"
    execute "ALTER TABLE schools ADD CONSTRAINT school_references_location FOREIGN KEY (a_id) REFERENCES locations(a_id) ON DELETE CASCADE ON UPDATE CASCADE;"
    change_column_null :schools, :school_name, false
    change_column_null :schools, :a_id, false
  end

  def down
    execute "ALTER TABLE schools DROP PRIMARY KEY;"
    execute "ALTER TABLE schools DROP FOREIGN KEY school_references_location;"
    execute "ALTER TABLE schools DROP INDEX a_id;"
    drop_table :schools
  end
end

型号:

class School < ApplicationRecord
  self.primary_key = :school_id
end

是的,您还需要在模型中定义关联。

对于所有 rails 个申请,

  • 根据关联迁移和更改数据库是第一步。

  • 然后在模型中添加关联语句,以便可以使用简单的方法访问来自数据库的关联。像 user.posts

  • 在模型中添加关联语句,为您提供根据调用的方法生成查询的方法,轻松从数据库中检索数据。如果您不想在模型中包含关联语句,也可以使用 join 和 select 语句查询数据库。

因此,简而言之,设计模式来管理关联是必要的,而在模型中提及它们则不是。但我们这样做是为了让我们的生活和代码更简单。