如何删除此部分中的局部变量?

时间:2013-07-01 20:25:57

标签: ruby-on-rails ruby

我认为在局部变量局部变量很糟糕,但我不知道如何重构:

部分:

<div class="span4">
<% local_revision, latest_svn_revision = get_revision_from current_local_path %>
<ul>
  <li><span class="muted">Local Svn Revision</span>: <b><%= local_revision %></b></li>
  <li><span class="muted">Latest Svn Revision</span>: <b><%= latest_svn_revision %></b></li>
</ul>

助手:

def get_revision_from(local_path)
  working_info = YAML.load `call svn info \"#{local_path}\"`
  repo_path = working_info['Repository Root']
  repo_info = YAML.load `call svn info \"#{repo_path}\"`

  return working_info['Revision'], repo_info['Revision']
end

此方法get_revision_from返回两个结果,如何在不使用局部变量的情况下在partial中使用这两个结果?

这个部分用在标题中,所以我想在每个页面中使用它。如果它们在每个页面中使用,那么我将哪个控制器置于这两个变量中?

2 个答案:

答案 0 :(得分:1)

如果要从局部变量中获取变量,可以将值作为参数传递。您可以按照Rails Guide

中的说明执行此操作
<h1>New zone</h1>
<%= error_messages_for :zone %>
<%= render partial: "form", locals: {zone: @zone} %>

在该示例中,@zone的值将在部分代码中以zone的形式提供。

答案 1 :(得分:0)

将你的帮助器方法移动到你的ApplicationController中,然后重构它以使它不接受参数(在方法本身中读入current_local_path),以便它实例化实例变量。然后在应用程序控制器上将其设为before_filter

before_filter :get_revision

def get_revision
  # ...
  @local_revision = working_info['Revision']
  @latest_svn_revision = repo_info['Revision']
end

然后在您的布局文件中使用@local_revision@latest_svn_revision