Sequelize.js的关联不会在页面上呈现

时间:2012-07-13 09:16:16

标签: javascript node.js express sequelize.js

我有两个型号。

var self = {
    User: sequelize.define('user', {
        id: {type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true},
        name: {type: Sequelize.STRING,allowNull: false}
    }),

    Role: sequelize.define('role', {
        id: {type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true},      
        name: {type: Sequelize.STRING,allowNull: false} 
   })
}

我还指定了它们之间的关联。

self.User.belongsTo(self.Role);

控制器user.js的一部分:

list: function(req, res){
   models.User.findAll({offset: offset, limit: limit}).success(function (users) {
            if (req.params.format == 'html') {
                res.render('admin/user/list.html', {
                    title: 'Users',
                    layout: layout,
                    users: users
                });
            }   else if (req.params.format == 'json') {
                res.json(users);
            }
   }

在视图list.html中:

<% users.forEach(function(user){ %>
    <tr>
        <td><%= user.id %></td>
        <td><a href="/admin/user/<%= user.id %>/show.html"><%= user.name %></a></td>
        <td><%= user.getRole().name %></td>
    </tr>
<% } %>

如果我们致电/list.html我们在页面上为每个用户获得了未定义的角色。

如果我们调用/list.json,我们获得:

[{"id":1,"name":"user1", "role_id":1},
[{"id":2,"name":"user2", "role_id":1},
[{"id":3,"name":"user3", "role_id":2},
...

如何在list.html和json响应中获取每个用户的角色? 或者也许有更好的方法?

感谢。

2 个答案:

答案 0 :(得分:1)

您需要致电

models.User.findAll({offset: offset, limit: limit, include: [models.Role]})

有关详细信息,请参阅http://sequelizejs.com/documentation#models-eager-loading

答案 1 :(得分:0)

没有获得关联角色的原因是,获取该用户的角色是异步处理的。这意味着1.)您需要使用user.getRole().success(function(role){})和2.)您需要读取控制器中的角色,因为EJS无法处理异步性。希望有所帮助:)