希望这里有一个简单的问题,但我似乎无法为我的生活找到答案。刚开始使用 RoR,但之前来自 ASP MVC。我在呈现部分 View 时遇到问题,其局部变量不一定与主视图的变量相关联。例如,对于一个博客,我试图呈现一个将链接到存档的侧边栏。
def sidebar
@blog_posts = Blog.all(:select => "created_at")
@post_months = @blog_posts.group_by { |m| m.created_at.beginning_of_month }
end
局部 View _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 始终为零。是否可以直接从 View 调用操作并简单地渲染“侧边栏”?在 ASP MVC 中,我曾经只是将侧边栏设为 ChildActionOnly 和主视图中的 Render.Action,但在 RoR 中我完全无能为力。感谢您的帮助!
最佳答案
我认为这里发生的事情是你的侧边栏被视为一个部分,你的 Controller 方法永远不会被调用。在这种情况下,我会将侧边栏 Controller 方法中当前包含的代码放入当前 View 的 ApplicationHelper 模块或辅助模块中,具体取决于您是否需要从其他 View 呈现侧边栏。
您需要稍微调整代码才能在模块中工作。您应该让方法返回您想要的值,而不是设置 session 变量。
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
当然,这很可能需要重构并且可能无法像写的那样工作,但这是我的总体想法。
祝你好运。
关于ruby - Rails 从 View 中调用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5031905/