1

たとえば、次のような部分があるかもしれません。

<div>
  <%= f.label :some_field %><br/>
  <%= f.text_field :some_field %>
</div>

これは、編集と新しいアクションで機能します。また、次のようなものもあります。

<div>
  <%=h some_field %>
</div>

ショーアクション用。sharedしたがって、すべてのパーシャルは 1 つのディレクトリまたは何かの下にあると考えるでしょう。これで私が目にする問題は、これらは本質的に同じパーシャルですが異なるアクションであるため、これらの両方が競合を引き起こすことです。

<!-- for edit and new actions -->
<%= render "shared_edit/some_partial" ... %>

<!-- for show action -->
<%= render "shared_show/some_partial" ... %>

これをどのように処理しますか?これらのすべてのアクションを 1 つのパーシャルに結合し、現在のアクションが何であるかを判断することによって、さまざまな部分をレンダリングすることは良い考えですか?

4

1 に答える 1

4

ディレクトリを使用するときはshared、モデル名を入れて、パーシャルに次のような名前を付けます。

shared/person/_show.html.erb
shared/person/_form.html.erb

フォームをレンダリングしたり部分的に表示したりするために1行にしたい場合は、ヘルパーを追加できます。

def render_form_or_show(model)
  if edit? || new? 
    return render :partial => "shared/#{model}/form"
  elsif show?
    return render :partial => "shared/#{model}/show"
  end
  return ""
end

パーシャルを共有ディレクトリに配置してからモデルディレクトリに配置するなど、いくつかのルールを許可し、編集と新規の場合は常に_formを、showアクションの場合は_showを使用すると、機能します;)。もちろん、edit?メソッドなどを定義する必要があります。

# Application controller
def edit?
  params[:action] == 'edit'
end

または、アクション名を取得するためのより良い方法があるかもしれません:)。

于 2010-05-07T11:36:52.200 に答える