0

我认为在局部变量中有局部变量是不好的,但我不知道如何重构:

部分的:

<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返回两个结果,如何在不使用局部变量的情况下在部分中使用这两个结果?

此部分用于页眉中,因此我想在每个页面中使用它。如果它们在每个页面中都使用,那么我应该将这两个变量放在哪个控制器上?

4

2 回答 2

1

如果您想从局部变量中取出变量,可以将值作为参数传递。您可以按照Rails Guide中的说明进行操作:

<h1>New zone</h1>
<%= error_messages_for :zone %>
<%= render partial: "form", locals: {zone: @zone} %>

在该示例中, 的值@zone将在部分代码中作为zone.

于 2013-07-01T20:48:30.327 回答
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

于 2013-07-01T20:48:36.323 回答