1

次の状況で自分のデータに到達するにはどうすればよいのでしょうか。

Pagesというリソースがあり、すべてのアクションが可能で、Ryanbateがhttp://railscasts.com/episodes/117-semi-static-pages?autoplay=trueのrailscastで提案して作成されました。今、私はレイアウトフォルダを使用しました

application.html.erb

_footer.html.erb
_header.html.erb

このページにはパーマリンクがあり、_footerセクションに配置して、About Us、TermandConditionなどにすることができます。

だからここで私が行ったことapplication.html.erb

<%= render 'layouts/header' %>
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>

レイアウトフォルダで_footerを呼び出しますこれは_footer.html.erbです

<footer class="footer">
<small>
Copyright <%= Time.now.year %>
</small>
<nav><%= render "pages/link" %>
<ol class="footer_pages"> 
</ol>
</nav>
</footer>

Pages/_link.html.erb内のファイルを呼び出すファイルこれはファイルです

<li>
<%= @pages.each do |page| %>
<%= page.name %>
<% end %>
</li>

この時点で、pages.eachは初期化されておらず、正しい場合は機能しません。したがって、呼び出し元であるため、コントローラーapplicationControllerで初期化@pages=Page.allを実行しました。この理論は私がそれを読むことを可能にするはずです、しかしそれはまだうまくいきません!私は何を間違っていますか?

他のコメントを追加する方法がわからないので更新するapplicationController

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper
@pages = Page.all
end
4

2 に答える 2

1

おそらく、@pagesインスタンス変数を設定するApplicationControllerでbefore_filterを使用する必要があります。その後、すべてのページがこのデータにアクセスできるようになります。

このようなもの:

class ApplicationController < ActionController::Base
  before_filter :pages

  def pages
    @pages = Page.all
  end

  ...
end
于 2012-07-19T16:15:06.600 に答える
0

問題は、パーシャルをレンダリングするときに、コントローラーからの変数がパーシャルに渡されないことです。@pagesつまり、コントローラーで初期化しても、パーシャルは聞いたことがありません。

次のように変数@pagesをパーシャルに渡してみてください。

# page the partial is first called from
<%= render 'layouts/footer', :locals => {:pages => @pages} %>

# _footer.html.erb
<%= render "pages/link", :locals => {:pages => pages} %>

# _link.html.erb
<li>
<%= pages.each do |page| %>
<%= page.name %>
<% end %>
</li>

詳細については、http: //guides.rubyonrails.orgを参照してください。(パーシャルのレンダリングはページの約80%下にあります)

于 2012-07-19T16:21:07.520 に答える