0

問題なくレンダリングする前に、いくつかのコントローラー ロジックを実行する必要があるパーシャルがあります。パーシャルを、レンダリングされるたびに実行されるコントローラー ロジックに関連付ける方法はありますか?

たとえば、これは私の現在のコードがどのように見えるかです:

MyDataController:

class MyDataController < ApplicationController
  def view
    @obj = MyData.find(params[:id])
    run_logic_for_partial
  end

  def some_method_i_dont_know_about
    @obj = MyData.find(params[:id])
    # Doesn't call run_logic_for_partial
  end

  def run_logic_for_partial
    @important_hash = {}
    for item in @obj.internal_array
      @important_hash[item] = "Important value"
    end
  end
end

view.html.erb:

Name: <%= @obj.name %>
Date: <%= @obj.date %>
<%= render :partial => "my_partial" %>

some_method_i_dont_know_about.html.erb:

Name: <%= @obj.name %>
User: <%= @obj.user %>

<%# This will fail because @important_hash isn't initialized %>
<%= render :partial => "my_partial" %>

_my_partial.html.erb:

<% for item in @obj.internal_array %>
  <%= item.to_s %>: <%= @important_hash[item] %>
<% end %>

メソッドがコントローラーから明示的に呼び出されていなくても、レンダリングさrun_logic_for_partialれるたびにそれが呼び出されるようにするにはどうすればよいですか? _my_partial.html.erbできない場合、この種の状況に対処するために Rails で使用される一般的なパターンはありますか?

4

2 に答える 2

3

あなたがやろうとしていることは、Rails コントローラー/ビューがどのように使用されるように設計されているかという粒度に反します。もう少し構造を変えたほうがいいです。ヘルパーに入れて、引数を取るようにしないのはなぜですかrun_logic_for_partial(暗黙のうちに に取り組むのではなく@obj)?

ビュー「ヘルパー」の例を見るには、ここを見てください: http://guides.rubyonrails.org/getting_started.html#view-helpers

于 2013-06-17T16:43:32.300 に答える