Railsはcontent_forを使用し、同じレイアウトを2回レンダリングします

ミハイルhidr0キリロフ

私は非常に特殊なレイアウトのテーマを使用しており、フォームをレールするためのフェイルセーフな方法を作りたかったのです。

レイアウトがあります app/views/shared/forms/fields/_layout.html.erb

<div class="js-form-message mb-4">
  <div class="js-focus-state input-group u-form">
    <div class="input-group g-brd-primary--focus">
      <%= yield(:field) %>
    </div>
  </div>
</div>

そして、私は2つのパーシャルを持っています。1番目の部分:app/views/shared/forms/fields/_email.html.erb

<% form = locals[:form] %>
<% locals[:required] = locals[:required].nil? ? true : locals[:required] %>
<% locals[:placeholder] = locals[:placeholder] || t('forms.shared.email.placeholder') %>


<%= render layout: "shared/forms/fields/layout", locals: locals do %>
  <% content_for(:field) do %>
    <%= form.email_field :email, 
      placeholder: locals[:placeholder], 
      class: "form-control g-py-15 g-px-15",
      "data-error-class"=>"u-has-error-v1-3",
      "data-success-class"=>"u-has-success-v1-2",
      "data-msg-email" => t('forms.shared.email.validate'),
      "data-msg" => t('forms.shared.required'),
      autofocus: locals[:autofocus],
      required: locals[:required] %>  
  <% end %>
<% end %>

2番目の部分: app/views/shared/forms/fields/_login.html.erb

<% form = locals[:form] %>
<% locals[:required] = locals[:required].nil? ? true : locals[:required] %>
<% locals[:placeholder] = locals[:placeholder] || t('forms.shared.login.placeholder') %>


<%= render layout: "shared/forms/fields/layout", locals: locals do %>
  <% content_for(:field) do %>
    <%= form.email_field :login, 
      placeholder: locals[:placeholder], 
      class: "form-control g-py-15 g-px-15",
      "data-error-class"=>"u-has-error-v1-3",
      "data-success-class"=>"u-has-success-v1-2",
      "data-msg" => t('forms.shared.required'),
      autofocus: locals[:autofocus],
      required: locals[:required] %>  
  <% end %>
<% end %>

そして私がこれをするとき:

<%= render "shared/forms/fields/email", locals: {form: f} %>

<%= render "shared/forms/fields/login", locals: {form: f} %>

私は得る

Email Field

Email Field/Login Field

私はcontent_forあなたがそれを与えたブロック「追加」し、それから私yieldがブロック全体が返されることを知りました

初めて何も入っておらず、content_for(:field)それに追加されEmail Fieldます。しかし、2回目はコンテンツをクリアせず、追加Login Fieldするだけです。

私はさらに複雑さを加えることを考えているlayout.html.erbので、それをインラインに保つことはオプションではありません。

content_forの「最新の」値を生成するためだけにレイアウトに指示する方法はありますか?

編集:

降伏後にフラッシュするメソッドを作成し、同じキーを再度使用することを提案しました。

def yield_and_flush!(content_key)
  view_flow.content.delete(content_key)
end
ミハイルhidr0キリロフ

解決策は、yield_and_flush!メソッドを作成することでした。私はここで解決策を見ました

def yield_and_flush!(content_key)
  view_flow.content.delete(content_key)
end

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ViewPagerで同じフラグメントを使用しますが、フラグメントのレイアウトは毎回異なります

分類Dev

Reactを使用してさまざまなレイアウトをレンダリングする方法は?

分類Dev

毎回同じdataRowをレンダリングしすぎる

分類Dev

Rails-AJAXまたはリダイレクトを使用してJavaScriptをレンダリングする

分類Dev

NSCollectionViewは、すべてのNSCollectionViewItemを同じポイントでレンダリングします

分類Dev

ReduxFormは、酵素を介してマウントすると2回レンダリングされます

分類Dev

Railsは部分的に2回レンダリングします

分類Dev

同じ角度ルートを使用して、2つの異なるルーターアウトレットで2つの異なるコンポーネントをレンダリングするにはどうすればよいですか?

分類Dev

制約レイアウト。問題をレンダリングします。レイアウトエディタ

分類Dev

最後のタブを閉じた後、ログアウトリンクにリダイレクトします

分類Dev

Railsログはリダイレクトを表示しますが、ビューは同じままです

分類Dev

reactjsの同じ親コンポーネントから取得して異なるレイアウトで投稿をレンダリングする方法

分類Dev

Jekyllは同じテンプレートを複数の言語でレンダリングします

分類Dev

StateHasChanged()は、コンポーネントを2回に1回再レンダリングします

分類Dev

CBVを使用して、同じテンプレートで2つのモデルをレンダリングします

分類Dev

自動レイアウトを使用して、UIWebViewをコンテンツと同じ高さにします

分類Dev

React(Preact)はコンテンツを2回レンダリングします

分類Dev

WeblogicforkRenderオプションはポートレットを2回レンダリングしています

分類Dev

LoremPixelコンポーネントは常に同じ画像をレンダリングします

分類Dev

jbuilderビューはレイアウトでレンダリングします

分類Dev

map()がレンダリングするコンポーネントが兄弟ではない場合でも、同じ配列に対して.map()を2回使用することを回避できますか?

分類Dev

ログアウトボタンは、ユーザーをログアウトする代わりに、uesrを同じページにリダイレクトします

分類Dev

djangoミドルウェアリダイレクトはページをレンダリングしません

分類Dev

ajaxを使用して、同じページでコントローラーアクションをレンダリングします

分類Dev

STDOUTを新しいウィンドウにリダイレクトし、STDERRを同じ新しいウィンドウとログファイルにリダイレクトします

分類Dev

Node / Expressは、同じhtmlファイルで複数のpostgresクエリをレンダリングします

分類Dev

同じコンポーネントにリダイレクトしてレンダリングします

分類Dev

レンダリングレイアウトを使用した場合、ポップアップを閉じることができません

分類Dev

すべてのIntelGPUはソフトウェアレンダリング(Mesa)のみを使用しますか?

Related 関連記事

  1. 1

    ViewPagerで同じフラグメントを使用しますが、フラグメントのレイアウトは毎回異なります

  2. 2

    Reactを使用してさまざまなレイアウトをレンダリングする方法は?

  3. 3

    毎回同じdataRowをレンダリングしすぎる

  4. 4

    Rails-AJAXまたはリダイレクトを使用してJavaScriptをレンダリングする

  5. 5

    NSCollectionViewは、すべてのNSCollectionViewItemを同じポイントでレンダリングします

  6. 6

    ReduxFormは、酵素を介してマウントすると2回レンダリングされます

  7. 7

    Railsは部分的に2回レンダリングします

  8. 8

    同じ角度ルートを使用して、2つの異なるルーターアウトレットで2つの異なるコンポーネントをレンダリングするにはどうすればよいですか?

  9. 9

    制約レイアウト。問題をレンダリングします。レイアウトエディタ

  10. 10

    最後のタブを閉じた後、ログアウトリンクにリダイレクトします

  11. 11

    Railsログはリダイレクトを表示しますが、ビューは同じままです

  12. 12

    reactjsの同じ親コンポーネントから取得して異なるレイアウトで投稿をレンダリングする方法

  13. 13

    Jekyllは同じテンプレートを複数の言語でレンダリングします

  14. 14

    StateHasChanged()は、コンポーネントを2回に1回再レンダリングします

  15. 15

    CBVを使用して、同じテンプレートで2つのモデルをレンダリングします

  16. 16

    自動レイアウトを使用して、UIWebViewをコンテンツと同じ高さにします

  17. 17

    React(Preact)はコンテンツを2回レンダリングします

  18. 18

    WeblogicforkRenderオプションはポートレットを2回レンダリングしています

  19. 19

    LoremPixelコンポーネントは常に同じ画像をレンダリングします

  20. 20

    jbuilderビューはレイアウトでレンダリングします

  21. 21

    map()がレンダリングするコンポーネントが兄弟ではない場合でも、同じ配列に対して.map()を2回使用することを回避できますか?

  22. 22

    ログアウトボタンは、ユーザーをログアウトする代わりに、uesrを同じページにリダイレクトします

  23. 23

    djangoミドルウェアリダイレクトはページをレンダリングしません

  24. 24

    ajaxを使用して、同じページでコントローラーアクションをレンダリングします

  25. 25

    STDOUTを新しいウィンドウにリダイレクトし、STDERRを同じ新しいウィンドウとログファイルにリダイレクトします

  26. 26

    Node / Expressは、同じhtmlファイルで複数のpostgresクエリをレンダリングします

  27. 27

    同じコンポーネントにリダイレクトしてレンダリングします

  28. 28

    レンダリングレイアウトを使用した場合、ポップアップを閉じることができません

  29. 29

    すべてのIntelGPUはソフトウェアレンダリング(Mesa)のみを使用しますか?

ホットタグ

アーカイブ