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は 2 つの結果を返します。ローカル変数を使用せずにこれら 2 つの結果をパーシャルで使用するにはどうすればよいですか?

このパーシャルはヘッダーで使っているので、どのページでも使いたいです。また、それらがすべてのページで使用される場合、これら 2 つの変数をどのコントローラーに配置すればよいでしょうか?

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 に答える