我认为在局部变量局部变量很糟糕,但我不知道如何重构:
部分:
<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中使用这两个结果?
这个部分用在标题中,所以我想在每个页面中使用它。如果它们在每个页面中使用,那么我将哪个控制器置于这两个变量中?
答案 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