2

さまざまなコントローラーのさまざまなビューで、次のパーシャルを使用したいと思います。@person現在のコントローラーのインスタンス変数を呼び出すだけの、より一般的な変数に置き換える方法はありますか?それが@personor@userまたはorかどうかは関係ありません@companyか?

<% content_for(:timestamps) do %>
    <p>Created: <%= l @person.created_at, :format => :long %>, Last updated: <%= l @person.updated_at, :format => :long %></p>
<% end %>

助けてくれてありがとう。

これは、Xavierのコードに基づく私のヘルパー関数です。

def timestamps
  content_for(:timestamps) do
    current_string = controller.controller_name.singularize
    current_object = instance_variable_get("@#{current_string}")
    created_at_time = l(current_object.created_at, :format => :long)
    updated_at_time = l(current_object.updated_at, :format => :long)
    text = "Created: #{created_at_time}, Last updated: #{updated_at_time}"
    content_tag(:p, text)
  end
end 
4

2 に答える 2

3

これは実行可能です。これを試して:

<% content_for(:timestamps) do %>
<% current_string = controller.controller_name.singularize %>
<% current_object = instance_variable_get("@#{current_string}") %>
    <p>Created: <%= l current_object.created_at, :format => :long %>, Last updated: <%= l current_object.updated_at, :format => :long %></p>
<% end %>

もちろん、エラー/ゼロチェックを実行することをお勧めします。そして、あなたがMVCの純粋主義者である場合(またはクリーンなコードのように)、おそらくそれをヘルパーに移動したいと思うでしょう。しかし、それは機能的な出発点です。

お役に立てば幸いです。

于 2013-01-19T13:56:40.707 に答える
0

探している要素を与えるメソッドを各コントローラーで定義します。たとえば、PersonController

 def current_element 
   @person
 end

そして、このメソッドをでヘルパーとして定義ApplicationControllerし、ビューからメソッドを使用できるようにします。

 helper_method :current_element

このメソッドの結果を部分的なパラメータとして使用します。

_the_partial.html.erb

<% content_for(:timestamps) do %>
    <p>Created: <%= l element.created_at, :format => :long %>, Last updated: <%= l @person.updated_at, :format => :long %></p>
<% end %>

そしてあなたの見解では:

render :partial => 'the_partial', :locals => { :element => current_element } 
于 2013-01-19T13:55:20.940 に答える