Pav*_*lli 10 mysql express sequelize.js handlebars.js
一切都在这里工作.唯一的问题是,在我的手柄文件中,我必须得到一个人的任务,如下所示:
this.Tasks
Run Code Online (Sandbox Code Playgroud)
我宁愿让它看起来像这样:
this.tasks
Run Code Online (Sandbox Code Playgroud)
我如何定制Sequelize呢?
这就是我的应用程序的根路径(它呈现index.handlebars文件)
我的路线:
router.get('/', function(req, res) {
models.Person.findAll({
include: [ models.Task ]
}).then(function(people) {
res.render('index', {
user_id: req.session.user_id,
email: req.session.user_email,
logged_in: req.session.logged_in,
people: people
});
});
});
Run Code Online (Sandbox Code Playgroud)
我的index.handlebars文件:
{{#each people}}
<li>
{{this.name}}
{{#if ../logged_in}}
<a href="/people/{{this.id}}/destroy"> destroy</a>
{{/if}}
<ul>
{{#if ../logged_in}}
<li>
<form action="/people/{{this.id}}/tasks/create" method="POST" style="display: inline">
<input type="text" name="task" placeholder="add task here">
<input type="submit" value"assign task">
</form>
</li>
{{/if}}
{{#each this.Tasks }}
<li>
{{this.task}}
{{#if ../../logged_in}}
<a href="/people/{{this.person_id}}/tasks/{{this.id}}/destroy">destroy</a>
{{/if}}
</li>
{{/each}}
</ul>
</li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我的人员表迁移:
"use strict";
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface
.createTable('people', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: Sequelize.STRING,
created_at: Sequelize.DATE,
updated_at: Sequelize.DATE
});
},
down: function(queryInterface, Sequelize) {
return queryInterface
.dropTable('people');
}
};
Run Code Online (Sandbox Code Playgroud)
我的任务表迁移:
"use strict";
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface
.createTable('tasks', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
person_id: {
type: Sequelize.INTEGER
},
task: Sequelize.STRING,
created_at: Sequelize.DATE,
updated_at: Sequelize.DATE
});
},
down: function(queryInterface, Sequelize) {
return queryInterface
.dropTable('tasks');
}
};
Run Code Online (Sandbox Code Playgroud)
我的person.js模型:
"use strict";
module.exports = function(sequelize, DataTypes) {
var Person = sequelize.define("Person", {
name: DataTypes.STRING
}, {
underscored: true,
freezeTableName: true,
tableName: 'people',
classMethods: {
associate: function(models) {
Person.hasMany(models.Task)
}
}
});
return Person;
};
Run Code Online (Sandbox Code Playgroud)
我的task.js模型:
"use strict";
module.exports = function(sequelize, DataTypes) {
var Task = sequelize.define("Task", {
task: DataTypes.STRING
}, {
freezeTableName: true,
tableName: 'tasks',
classMethods: {
associate: function(models) {
Task.belongsTo(models.Person, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
}
}
});
return Task;
};
Run Code Online (Sandbox Code Playgroud)
小智 6
除了对 sequelize.define 使用小写名称之外,您还可以使用 'as' 选项通过别名设置名称。前任。Task.belongsTo(models.Person, {as: 'task'});
. 或者,您可以在定义函数本身中设置别名。前任。
sequelize.define("Task", attributes,
{
name : {
singular: "task",
plural: "tasks"
})
我的task.js模型:
Run Code Online (Sandbox Code Playgroud)module.exports = function(sequelize, DataTypes) { var Task = sequelize.define("Task", {
只需指定
var task = sequelize.define("task", {
Run Code Online (Sandbox Code Playgroud)
没解决你的疑问吗?