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

时间:2017-11-13 12:49:32

标签: ruby-on-rails model rails-migrations

我是Rails的新手,目前我们的课程中,我们必须创建一个包含数据库的应用程序。

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

我的问题是,由于我在迁移中设置了这些关联,我是否还必须在模型中设置关联(即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

1 个答案:

答案 0 :(得分:2)

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

对于所有rails应用程序,

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

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

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

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