0

main_controllerアプリのメイン ページにコンテンツを提供するための Rails アプリがあります。画像のコレクションにアクセスしたいので、コントローラーで次のメソッドを作成しました。

def featured_illustrations
    #future implementation: get images where featred == true
    @featured_illustrations << Illustration.find(152)
    @featured_illustrations << Illustration.find(272)
    @featured_illustrations << Illustration.find(275)

    respond_to do |format|
      format.html
      format.json { render :json => @featured_illustrations }
    end
  end
helper_method :featured_illustrations

次のヘルパーがあります。

module MainHelper
  require MainController
  @featured_illustrations = MainController.featured_illustrations
end

そして、featured_images部分的な次のコード:

<div class="featured">
  <% @featured_illustrations.each do |illustration| %>  
   <!-- somc code to print images -->
  <% end %>
</div>

ページを表示しようとすると、次のエラーが表示されます。

uninitialized constant MainHelper::MainController

私はこれまでヘルパーと仕事をしたことがないので、ガイダンスをいただければ幸いです。ありがとう。

更新: を削除しましたMainHelperが、ページを読み込もうとすると次のエラーが表示されます:

undefined method `each' for nil:NilClass
Extracted source (around line #2):

1: <div class="featured">
2:   <% featured_illustrations.each do |illustration| %>  
3:     <div class="feature-image" id="feature-one">152</div>
4:     <div class="feature-image" id="feature-two">272</div>
5:     <div class="feature-image" id="feature-three">275</div>

原因について何か考えはありますか?

4

1 に答える 1

0

簡単な答え: あなたが投稿したエラーでは、正しい変数を繰り返し処理していないようです。注目のイラストを、使用しているローカル変数ではなく、インスタンス変数 (@ で始まる) に割り当てました。

変化する:

<% featured_illustrations.each do |illustration| %>

に:

<% @featured_illustrations.each do |illustration| %>

ただし、部分的にアクセスするインスタンス変数を設定するだけである場合、ここでヘルパーが必要な理由が正確にはわかりません。

あなたfeatured_illustrationsはインスタンス変数を設定しています。ただし、名前を指定してパーシャルをレンダリングするときに使用しているアクションはわかりませんfeatured_images

私は提案します:

app/controllers/main_controller.rb

def featured_illustrations
  @featured_illustrations = Illustration.where(featured: true)

  respond_to do |format|
    format.html
    format.json { render :json => @featured_illustrations }
  end
end

アプリ/ビュー/メイン/featured_illustrations.html.erb

<div class="featured">
  <% @featured_illustrations.each do |illustration| %>  
    <!-- somc code to print images -->
  <% end %>
</div>

これは、主なイラスト メソッドのメイン コントローラーに正しくルーティングするようにルート ファイルが設定されていることを前提としています。何かのようなもの:

match '/featured_illustrations/', to: 'main#featured_illustrations'

最後に、まだ行っていない場合は、Rails が REST とリソースフル ルーティングをどのように使用しているかを確認することをお勧めします。Getting Started with Rails ガイドで多くのことを見つけることができます。

于 2013-07-27T16:22:43.677 に答える