2016-05-18 28 views
10

Tutto funziona qui. L'unico problema è che in mio file manubrio, devo arrivare a compiti di una persona come questo:Come rendere sequelize ha molte associazioni in lettere minuscole nelle viste

this.Tasks 

avrei preferito apparire come questo:

this.tasks 

Come faccio a personalizzare Sequelize a fare così?

Questo è ciò che il percorso radice della mia app sembra (è il rendering del file index.handlebars)

project management app

il mio percorso:

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

mio file 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}} 

la mia migrazione tabella persone:

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

mia migrazione tabella delle attività:

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

mia person.js modello:

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

mio modello 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; 
}; 

risposta

0

mio modello task.js:

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

Basta specificare

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

non ha Risolve si mette in discussione?

1

Invece di usare il nome in lettere minuscole per sequelize.define, è possibile anche impostare il nome tramite alias usando l'opzione 'come'. Ex. Task.belongsTo(models.Person, {as: 'task'});. In alternativa, è possibile impostare l'alias nella funzione di definizione stessa. Ex. sequelize.define("Task", attributes, { name : { singular: "task", plural: "tasks" })

1

definire il nome del modello in minuscolo come

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