このcaseステートメントを機能させるにはどうすればよいですか?

マルカミリオン

私の見解では、私はこれを行っています:

<% case @post 
 when @post.has_children? %>
    <% @post.children.each do |child| %> 
            <li><%= link_to child.title, post_path(child)%></li>        
    <% end %>
<% when @post.has_siblings? %>
    <% @post.siblings.where.not(id: @post.id).each do |sibling| %>
            <li><%= link_to sibling.title, post_path(sibling)%></li>                    
    <% end %>
<% when [email protected]? %>
        <li><%= link_to @post.parent.title, post_path(@post.parent) %></li>
<% else %>
    </ul>
</p>
<p>
    There are no related posts.
</p>
<% end %>

基本的にやりたいのは@post、いろいろな状態をチェックたいですもしそうならhas_children?それならhas_siblings?、など。

上記のいずれかが真または偽の場合、ステートメントを終了させたくありません。

ビューが読み込まれると、これらすべてのステートメントを自動的にチェックする必要があります。上記のいずれかに該当する場合は、チェックのすぐ下でコマンドを実行する必要があります。

問題は、これを行うと、常にデフォルトでになりelseます。つまり、caseステートメントは機能しません。

ばらばらのifステートメントを単純に実行できることはわかっていますが、その周りのHTMLは少し奇妙になります。

CASEステートメントでこれを行う方法はありますか?

編集1

ifステートメントが正しく機能しない理由は、3つのifステートメントが連続している場合です-それらのいずれも相互作用しません(これがすべての条件を適切に循環する唯一の方法です)、がelseトリガーされないためです正しく。

たとえば、最初の2つの条件が真であるが、3番目の条件が真で"there are no related posts"ない場合は...印刷されます...そうでない場合。parent投稿がない場合です

基本的には、すべてを網羅したrelated投稿が必要なので、さまざまなオプションをすべて繰り返して、それらの関係が存在するかどうかを確認します。もしそうなら、私はそれらを引き出しています、そして、そうでなければ、彼らは先に進みます。存在しない場合は、「関連する投稿はありません」とは印刷しません。

ピート

ビューがすでに複雑に見えているという事実は、ビューからロジックをリファクタリングして、それが属するPostモデルに配置することをお勧めすることを示しています。理想的には、ビューは次のようになります。

<%# posts/show.html.erb %>
<% if @post.has_related_posts? %>
   <%= render partial: 'children', collection:  @post.children, as: :child %> 
   <%= render partial: 'siblings', collection:  @post.other_siblings, as: :sibling %> 
   <%= render partial: 'parent', locals:  {parent: @post.parent}%> 
<% else %>
  <p>There are no related posts</p>
<% end %>

パリタル:

<%# posts/_children.html.erb %>
<li><%= link_to child.title, post_path(child)%></li>


<%# posts/_sibling.html.erb %>
<li><%= link_to sibling.title, post_path(sibling)%></li>

<%# posts/_parent.html.erb %>
<% unless parent.nil? %>
  <li><%= link_to parent.title, post_path(parent) %></li>
<% end %>

次に、Postモデルはロジックを整理できます。

class Post < ActiveRecord::Base
  def has_related_posts?
    !children.to_a.empty? || !other_siblings.to_a.empty? || !parent.nil?
  end

  def children
    self.children || [] # Rails does this automatically, but just for the example
  end

  def other_siblings
    self.siblings.where.not(id: self.id)
  end

  #...
end

これがあなたの質問に直接答えないことは知っていますが、私見ではそれがより良い解決策だと思います。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

このPythonfilterwarningsステートメントを機能させるにはどうすればよいですか?

分類Dev

C-このnullステートメントを機能させるにはどうすればよいですか?

分類Dev

このコンストラクターを機能させるにはどうすればよいですか?

分類Dev

複数のifステートメントを持つ関数でPythonカウンターを機能させるにはどうすればよいですか?

分類Dev

このキャンバスアニメーションスクリプトをFirefoxで機能させるにはどうすればよいですか?

分類Dev

IFステートメントが正常に機能していません。これを修正するにはどうすればよいですか?

分類Dev

ドメインを特定のポートで機能させるにはどうすればよいですか?

分類Dev

このクエリにcaseステートメントのlessthan whereステートメントを含めるにはどうすればよいですか?

分類Dev

csv値が存在しない場合にifステートメントを正しく機能させるにはどうすればよいですか?

分類Dev

このSQLリクエストをPHPで機能させるにはどうすればよいですか?

分類Dev

この平均パーセンテージ式を複数のシートで機能させるにはどうすればよいですか?

分類Dev

&&を含むifステートメントを正しく機能させるにはどうすればよいですか?

分類Dev

このスクリプトを機能させるにはどうすればよいですか?

分類Dev

このスクリプトを機能させるにはどうすればよいですか?

分類Dev

PDFからのテキスト抽出を機能させるにはどうすればよいですか?

分類Dev

Djangoテンプレートで{%url logout%}を機能させるにはどうすればよいですか?

分類Dev

このマトリックス検索機能のパフォーマンスを向上させるにはどうすればよいですか?

分類Dev

スライダーをこのように機能させるにはどうすればよいですか?

分類Dev

テンプレートでjquery、cssの外部および内部スタイルを機能させるにはどうすればよいですか?

分類Dev

デバイスを特定のルートにルーティングし、フックを機能させるにはどうすればよいですか?

分類Dev

1つのcase条件が満たされた後、switchステートメントでcaseを変更するにはどうすればよいですか?

分類Dev

この印刷ステートメントの配置を修正するにはどうすればよいですか?

分類Dev

ListViewItemのテンプレートスタイルとListView.ItemTemplateの両方を機能させるにはどうすればよいですか?

分類Dev

このUpdateステートメントを最適化するにはどうすればよいですか?

分類Dev

このLINQのステートメントの一部を繰り返さないようにするにはどうすればよいですか?

分類Dev

このサブプロットをPythonで機能させるにはどうすればよいですか?

分類Dev

この場合、JOINおよびCASE WHENステートメントを使用するにはどうすればよいですか(sqlite android)

分類Dev

要約のCASEステートメントを含むこのクエリを修正するにはどうすればよいですか?

分類Dev

このコーディングをGoogleChromeで機能させるにはどうすればよいですか?

Related 関連記事

  1. 1

    このPythonfilterwarningsステートメントを機能させるにはどうすればよいですか?

  2. 2

    C-このnullステートメントを機能させるにはどうすればよいですか?

  3. 3

    このコンストラクターを機能させるにはどうすればよいですか?

  4. 4

    複数のifステートメントを持つ関数でPythonカウンターを機能させるにはどうすればよいですか?

  5. 5

    このキャンバスアニメーションスクリプトをFirefoxで機能させるにはどうすればよいですか?

  6. 6

    IFステートメントが正常に機能していません。これを修正するにはどうすればよいですか?

  7. 7

    ドメインを特定のポートで機能させるにはどうすればよいですか?

  8. 8

    このクエリにcaseステートメントのlessthan whereステートメントを含めるにはどうすればよいですか?

  9. 9

    csv値が存在しない場合にifステートメントを正しく機能させるにはどうすればよいですか?

  10. 10

    このSQLリクエストをPHPで機能させるにはどうすればよいですか?

  11. 11

    この平均パーセンテージ式を複数のシートで機能させるにはどうすればよいですか?

  12. 12

    &&を含むifステートメントを正しく機能させるにはどうすればよいですか?

  13. 13

    このスクリプトを機能させるにはどうすればよいですか?

  14. 14

    このスクリプトを機能させるにはどうすればよいですか?

  15. 15

    PDFからのテキスト抽出を機能させるにはどうすればよいですか?

  16. 16

    Djangoテンプレートで{%url logout%}を機能させるにはどうすればよいですか?

  17. 17

    このマトリックス検索機能のパフォーマンスを向上させるにはどうすればよいですか?

  18. 18

    スライダーをこのように機能させるにはどうすればよいですか?

  19. 19

    テンプレートでjquery、cssの外部および内部スタイルを機能させるにはどうすればよいですか?

  20. 20

    デバイスを特定のルートにルーティングし、フックを機能させるにはどうすればよいですか?

  21. 21

    1つのcase条件が満たされた後、switchステートメントでcaseを変更するにはどうすればよいですか?

  22. 22

    この印刷ステートメントの配置を修正するにはどうすればよいですか?

  23. 23

    ListViewItemのテンプレートスタイルとListView.ItemTemplateの両方を機能させるにはどうすればよいですか?

  24. 24

    このUpdateステートメントを最適化するにはどうすればよいですか?

  25. 25

    このLINQのステートメントの一部を繰り返さないようにするにはどうすればよいですか?

  26. 26

    このサブプロットをPythonで機能させるにはどうすればよいですか?

  27. 27

    この場合、JOINおよびCASE WHENステートメントを使用するにはどうすればよいですか(sqlite android)

  28. 28

    要約のCASEステートメントを含むこのクエリを修正するにはどうすればよいですか?

  29. 29

    このコーディングをGoogleChromeで機能させるにはどうすればよいですか?

ホットタグ

アーカイブ