首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails从视图调用操作

Rails从视图调用操作
EN

Stack Overflow用户
提问于 2011-02-18 00:49:18
回答 1查看 1.1K关注 0票数 3

希望在这里有一个简单的问题,但我似乎永远找不到答案。刚开始使用RoR,但之前来自ASP MVC。我在渲染局部视图时遇到了一个问题,局部变量不一定要绑定到主视图的变量。例如,通过一个博客,我试图呈现一个侧边栏,它将链接到归档。

代码语言:javascript
运行
复制
def sidebar
  @blog_posts = Blog.all(:select => "created_at")
  @post_months = @blog_posts.group_by { |m| m.created_at.beginning_of_month }
end

分部视图_sidebar如下:

代码语言:javascript
运行
复制
<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中,我完全一无所知。如有任何帮助,我们不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-18 01:03:47

我认为这里发生的情况是,yout侧边栏被视为部分,而您的控制器方法永远不会被调用。在这种情况下,我会将当前包含在侧栏控制器方法中的代码放入当前视图的ApplicationHelper模块或helper模块中,这取决于您是否需要从其他视图呈现侧栏。

您需要对代码进行一些调整,以便在模块中工作。您应该让方法返回所需的值,而不是设置会话变量。

代码语言:javascript
运行
复制
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

当然,这很可能需要重构,可能不会像编写的那样工作,但这是我的总体想法。

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5031905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档