Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从视图调用操作的Rails_Ruby_Ruby On Rails 3_Action_Partial Views_Render - Fatal编程技术网

Ruby 从视图调用操作的Rails

Ruby 从视图调用操作的Rails,ruby,ruby-on-rails-3,action,partial-views,render,Ruby,Ruby On Rails 3,Action,Partial Views,Render,希望这里有一个简单的问题,但我无法为我的生活似乎找到答案。刚开始使用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

希望这里有一个简单的问题,但我无法为我的生活似乎找到答案。刚开始使用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
局部视图侧栏如下所示:

<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 MVC中,我曾经只将侧边栏设置为ChildActionOnly,并从mainview中呈现.Action,但在RoR中,我完全不知道。感谢您的帮助

我认为这里发生的事情是,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
当然,这很可能需要重构,并且可能无法按编写的那样工作,但这是我的总体想法


祝你好运。

好问题,我自己也一直在想这个问题,我来自symfony的背景,在那里除了部分之外,还有组件(它们是部分视图,带有支持它们的控制器代码),谢谢你的回答。在ASP MVC中更容易实现,但我认为这是一个“更干净”的MVC解决方案