5

そこで私は Locomotive、Ruby on Rails CMS、およびそのエディターを使用してブログを作成しています。Locomotive バックエンドで、ブログ投稿を含むスラッグ「posts」を使用してモデルを作成しました。次に、私の index.liquid ファイルで、モデルの内容をループして全体を表示しようとしています。

液体ループは次のとおりです。

{% for post in contents.posts %}
    {{ post.title }}
{% endfor %}

しかし、「/ での NoMethod エラー」、「contentsnil:NilClass の未定義メソッド」が表示されます。for...in ループから .posts を削除すると、エラーは発生しませんが、ループするcontentsことはできないため、当然、ループは 1 回も発生しません。

ドキュメントを読みましたが、コードは機能するはずです。データがないかのように動作するのはなぜですか?

2012 年 12 月 11 日更新: コードを実際の機関車エンジンにプッシュすると、完全に動作しますが、エディターだけがこのエラーをスローします。エディターを使用して、ブラウザーではなく IDE からコードを編集できるようにします。

2012 年 12 月 12 日更新: これは機関車エディターが意図したものではないことがわかりました。ウェブサイトの作成中にダミーのデータベースを使用し、それをエンジンにプッシュして独自のデータベースで使用することになっています。

4

1 に答える 1

2
  1. Rails が接続しているバックエンドにデータがないため、ループがデータがないかのように動作している可能性があります。

コンテンツが本番データベースにある場合、Rails も本番データベースを使用する必要があります。

rails server -e production

この質問の本番環境への切り替えに関する詳細なメモを参照してください: Rails アプリケーションを本番環境に変更する

  1. 「contents」が nil の場合、「.posts」などのアクセサ メソッドはメソッド エラーとして表示されません。「contents.nil?」の場合に対処できるように、テンプレートにセクションを追加してみてください。本当です。

  2. 私は Locomotive CMS に詳しくなく、Rails だけに慣れているので、このような状況で試してみるべきもう 1 つのことがあります。モデルへの単数形および複数形の参照には注意してください。Rails はこれらの名前に非常にこだわっているため、"content" ではなく "content" を使用する必要がある場合があります。

于 2012-12-17T22:31:05.717 に答える