Vraag Hoe te sequelize te maken heeft veel associaties met kleine letters in views


Alles werkt hier. Het enige probleem is dat ik in mijn stuurbestand de taken van een persoon als volgt moet uitvoeren:

this.Tasks

Ik zou het liever als volgt hebben:

this.tasks

Hoe zou ik Sequelize aanpassen om dit te doen?

Dit is hoe de root-route van mijn app eruit ziet (het rendert het bestand index.handlebars)

project management app

mijn route:

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
    });
  });
});

mijn index.handlebars bestand:

  {{#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}}

my people table migration:

"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');
  }
};

mijn taken tabelmigratie:

"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');
  }
};

mijn person.js-model:

"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;
};

mijn task.js-model:

"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;
};

10
2018-05-18 18:24


oorsprong


antwoorden:


In plaats van de naam in kleine letters te gebruiken voor sequelize.define, kun je de naam ook via alias instellen met de 'als' optie. Ex. Task.belongsTo(models.Person, {as: 'task'});. Als alternatief kunt u de alias in de definieerfunctie zelf instellen. Ex. sequelize.define("Task", attributes, { name : { singular: "task", plural: "tasks" })


1
2017-09-16 06:39



definieer de modelnaam in kleine letters als

var Task = sequelize.define ("task", {


1
2017-12-27 10:54



mijn task.js-model:

module.exports = function(sequelize, DataTypes) {
var Task = sequelize.define("Task", {

Gewoon opgeven

var task = sequelize.define("task", {

Heeft het je vraag niet opgelost?


0
2018-05-20 13:56