我是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
答案 0 :(得分:2)
是的,您还需要在模型中定义关联。
对于所有rails应用程序,
根据关联迁移和更改数据库是第一步。
然后在模型中添加关联语句,以便可以使用简单方法访问db中的关联。像user.posts
等
在Models中添加关联语句可以为您提供根据调用的方法生成查询的方法,以便轻松地从db检索数据。如果您不想在模型中包含关联语句,还可以使用join和select语句查询db。
因此,简而言之,设计模式来管理关联是必要的,因为在模型中提及它们不是。但我们这样做是为了让我们的生活和代码更简单。