希望在这里有一个简单的问题,但我似乎永远找不到答案。刚开始使用RoR,但之前来自ASP MVC。我在渲染局部视图时遇到了一个问题,局部变量不一定要绑定到主视图的变量。例如,通过一个博客,我试图呈现一个侧边栏,它将链接到归档。
def sidebar
@blog_posts = Blog.all(:select => "created_at")
@post_months = @blog_posts.group_by { |m| m.created_at.beginning_of_month }
end分部视图_sidebar如下:
<div class="archives">
<h4>Blog Archive</h4>
<% @post_months.sort.reverse.each do |month, posts| %>
<%= link_to "#{h month.strftime("%B %Y")}: #{posts.count}", archive_path(:timeframe => month) %>
<% end %>
</div>我遇到的问题是,如果我只是在我的主视图中做一个渲染‘侧边栏’,动作似乎没有被调用,@post_months总是为空。有没有可能直接从视图中调用操作,并简单地将其呈现为“侧边栏”?在ASP中,我习惯于从主视图中将侧边栏设置为ChildActionOnly和Render.Action,但在RoR中,我完全一无所知。如有任何帮助,我们不胜感激!
发布于 2011-02-18 01:03:47
我认为这里发生的情况是,yout侧边栏被视为部分,而您的控制器方法永远不会被调用。在这种情况下,我会将当前包含在侧栏控制器方法中的代码放入当前视图的ApplicationHelper模块或helper模块中,这取决于您是否需要从其他视图呈现侧栏。
您需要对代码进行一些调整,以便在模块中工作。您应该让方法返回所需的值,而不是设置会话变量。
Module SomeModule
def blog_posts
Blog.all :select => "created_at"
end
def post_months
blog_posts.group_by { |m| m.created_at.beginning_of_month }
end
end当然,这很可能需要重构,可能不会像编写的那样工作,但这是我的总体想法。
祝好运。
https://stackoverflow.com/questions/5031905
复制相似问题