18

Rails は、レンダリング中のビューを早期に終了または「戻る」方法を提供していますか?

たとえば、次のような構造のビューがあります。

<h1>Your records summary</h1>

<% if @current_user.has_records? %>
  <p>You don't have any records.</p>
<% else %>
  ... long block of view emission code here ...
<% end %>

erb 以外のコードではreturn、そのif状態からだけで、その長いブロックを . 内に配置する必要はありませんelse。次のようになります。

<h1>Your records summary</h1>

<% if @current_user.has_records? %>
  <p>You don't have any records.</p>
  <% return (or something) %>
<% end %>
... long block of view emission code here ...

erbでそのようなことをする方法はありますか?

編集:明確にするために、提案されているような代替アプローチを求めているわけではありません。私は Rails 初心者ではありません。Ruby が私が提案したメカニズムを提供しているかどうかを知りたいだけです。

4

4 に答える 4

7

Rails 3.2.2 では、テンプレート内での return は問題なく機能します。

<% return unless allowed_tags %>
于 2015-09-24T14:47:10.380 に答える
5

IIRC には、テンプレートを早期に終了する組み込みのメカニズムはありません。erb は完全なテンプレート エンジンではありませんが、これはビュー レイヤーがどのように動作するべきか (私が思うに) と一致しています。

昔ながらの解決策は、テンプレートを でラップし、テンプレートcatch内からシンボルなどの何かをスローすることでした。

eval をラムダ内に埋め込んで、機能させることもできreturnます。

しかし、それでもえーと。

于 2013-06-24T19:37:02.970 に答える
2

最良の方法は、テンプレートをレンダリングする前にコントローラーで条件を処理することです。returnそこで、別のテンプレート (Add Record フォームなど) または結果テンプレートを初期化できます。

ビュー自体でそのロジックを Javascript にオフロードすることもできます。

于 2013-06-24T18:23:52.540 に答える