0

私は2つのモデルを持っています。

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 応答で各ユーザーの役割を取得するにはどうすればよいですか? それとももっと良い方法があるのでしょうか?

ありがとう。

4

2 に答える 2

1

電話する必要があります

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

詳細については、 http://sequelizejs.com/documentation#models-eager-loadingを参照してください

于 2013-10-11T09:47:55.043 に答える
0

関連付けられたロールを取得できない理由は、そのユーザーのロールの取得が非同期で処理されるためです。これは、1.) 使用する必要がありuser.getRole().success(function(role){})、2.) EJS は非同期性を処理できないため、コントローラーでロールを読み取る必要があることを意味します。それが役立つことを願っています:)

于 2012-07-13T18:12:42.033 に答える