我认为在分部中包含局部变量是不好的,但我不知道如何重构:
部分:
<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
返回两个结果,如何在不使用局部变量的情况下在分部中使用这两个结果?
这个分部在页眉中使用,所以我想在每一页中都使用它。如果它们在每一页中都使用,我应该把这两个变量放在哪个控制器上?
如果您想从分部中获取变量,可以将值作为参数传入。您可以按照Rails指南中的描述进行操作:
<h1>New zone</h1>
<%= error_messages_for :zone %>
<%= render partial: "form", locals: {zone: @zone} %>
在该示例中,@zone
的值将作为zone
在部分代码内部可用。
将helper方法移动到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