2016-06-26 16 views
0

Projectという名前の新しいオブジェクトを作成しました。このオブジェクトには、ギャラリーとその他のフィールドが含まれています。ビューでは、いくつかのデータを表示しています。前と次のプロジェクトへのリンクを入れたいと思います。私はすでに以前のプロジェクトを手に入れましたが、私がそれからスラッグを取得しようとすると、どういうわけかそれは動作しません。オブジェクト内のslugを表示しても表示されない

これは、プロジェクトのモデルである:

var keystone = require('keystone'); 
var Types = keystone.Field.Types; 

/** 
* Project Model 
* ========== 
*/ 

var Project = new keystone.List('Project', { 
    map: { name: 'title' }, 
    autokey: { path: 'slug', from: 'title', unique: true } 
}); 

Project.add({ 
    title: { type: String, required: true }, 
    state: { type: Types.Select, options: 'draft, published, archived', default: 'draft', index: true }, 
    author: { type: Types.Relationship, ref: 'User', index: true }, 
    publishedDate: { type: Types.Date, index: true, dependsOn: { state: 'published' } }, 
    category: { type: String, required: false }, 
    description: { type: Types.Html, wysiwyg: true, height: 150 }, 
    shortDescription: { type: Types.Html, wysiwyg: true, height: 100 }, 
    credits: { type: Types.Html, wysiwyg: true, height: 100 }, 
    galleries: { type: Types.Relationship, ref: 'Gallery', many: false }, 
    color: { type: String, required: false } 
}); 

Project.schema.virtual('content.full').get(function() { 
    return this.content.extended || this.content.brief; 
}); 

Project.defaultColumns = 'title, state|20%, author|20%, publishedDate|20%'; 
Project.register(); 

これはコントローラです:

var keystone = require('keystone'); 

exports = module.exports = function(req, res) { 

    var view = new keystone.View(req, res); 
    var locals = res.locals; 

    // Set locals 
    locals.section = 'projects'; 
    locals.filters = { 
     project: req.params.project 
    }; 
    locals.data = { 
     projects: [], 
     previousProject: [] 
    }; 

    // Load the current project 
    view.on('init', function(next) { 

     var q = keystone.list('Project').model.findOne({ 
      state: 'published', 
      slug: locals.filters.project 
     }).populate('galleries'); 

     q.exec(function(err, result) { 
      locals.data.project = result; 
      next(err); 
     }); 

    }); 

    //Load other projects 
    view.on('init', function(next) { 

     var q = keystone.list('Project').model.find({state: "published", publishedDate: {$lt: locals.data.project.publishedDate}}).sort('-publishedDate').limit(1); 
     q.exec(function(err, results) { 
      locals.data.previousProject = results; 
      next(err); 
     }); 

    }); 

    // Render the view 
    view.render('project'); 

}; 

そして、これが図である。どういうわけか

<div class="container"> 
    <p>{{{data.project.title}}}</p> 
    <p>—</p> 
    <p>{{{data.project.category}}}</p> 

    {{#if data.project.galleries}} 
     {{#each data.project.galleries.images}} 
      <img src="{{url}}" /> 
     {{/each}} 
    {{/if}} 
    <p>full project: {{data.previousProject}}</p> 
    <p>slug: {{data.previousProject.slug}}</p> 
    {{#if data.previousProject}} 
     <a href="/projects/{{data.previousProject.slug}}" >Previous project</a> 
    {{/if}} 
</div> 

{{data.previousProject}}が正しいレコード情報を示していしかし私がするとき{{data.previousProject.slug}}それは全く何も返しません。私はこれに対して何時間も頭を撫でてきましたが、どこに問題があるのか​​分かりません。前もって感謝します!!

答えて

0

コントローラーでmodel.findを使用していましたが、model.findOneを使用する必要がありますが、1つのレコードしか必要ないとわかっている場合は、.slugで直接値を取得します。 limit(1)を使用するだけでは十分ではありませんでした。

関連する問題