1

我想知道在以下情况下如何获取我的数据

我有一个名为 Pages 的资源,它具有所有可能的操作,并且是由 Ryan bate 在http://railscasts.com/episodes/117-semi-static-pages?autoplay=true在他的 railscast 上提出的。现在我已经使用了布局文件夹

应用程序.html.erb

_footer.html.erb
_header.html.erb

该页面有一个永久链接,我希望它们位于 _footer 部分,因此可以是关于我们、条款和条件等...

所以在这里我做了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

您可能需要在 ApplicationController 中使用 before_filter 来设置 @pages 实例变量。然后所有页面都可以访问这些数据。

像这样的东西:

class ApplicationController < ActionController::Base
  before_filter :pages

  def pages
    @pages = Page.all
  end

  ...
end
于 2012-07-19T16:15:06.600 回答
0

问题是当您渲染部分时,控制器中的变量不会传递给部分。换句话说,@pages即使您在控制器中对其进行了初始化,partial 也从未听说过。

尝试像这样将变量传递@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 回答