我想知道如何在以下情况下获取我的数据
我有一个名为Pages的资源,它可以执行所有操作,并且已经创建了Ryan bate在http://railscasts.com/episodes/117-semi-static-pages?autoplay=true的railscast上提出的建议。现在我使用的布局文件夹已经跟着
了application.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>
在layouts文件夹中调用_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>
在这一点上,如果我是正确的,则不会初始化并且不起作用所以我在控制器applicationController中初始化了@pages = Page.all,因为它是调用者。这个理论应该允许我阅读它,但它仍然不起作用!我做错了什么?
更新,因为我不知道如何添加其他评论 ApplicationController中
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
@pages = Page.all
end
答案 0 :(得分:1)
您可能需要在ApplicationController中使用before_filter来设置@pages实例变量。然后所有页面都可以访问这些数据。
这样的事情:
class ApplicationController < ActionController::Base
before_filter :pages
def pages
@pages = Page.all
end
...
end
答案 1 :(得分: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%)