게시물을 세 단락으로 나누기(each_slice 메서드)

17950 단어 eachRubyRails

본 보도의 목적

  • rails에서 투고를 1단 3부분으로 나누는 방법 공유
    → 제작 중 의외로 방법을 찾지 못했다
  • 문장의 대상

  • 레일스로 투고를 아래 그림처럼 1단 3부분으로 분할하고 싶은 사람

  • 방법

    each_slice 사용법.
    each_slice 방법은 블록에 전달되는 요소 수를 지정할 수 있습니다.
    예:
    sample.rb
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    numbers.each_slice(2) do |number1, number2|
      puts " #{number1} : #{number2}"
    end
    
    ↓↓↓↓↓↓↓↓↓↓↓
    terminal
    % ruby sample.rb
    
     1 : 2
     3 : 4
     5 : 6
     7 : 8
     9 : 10
    
    만약 배열된 요소수를 다 제거할 수 없다면, 마지막 단락의 요소수만 감소한다
    sample.rb
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    numbers.each_slice(3) do |number1, number2, number3|
      puts " #{number1} : #{number2}: #{number3}"
    end
    
    ↓↓↓↓↓↓↓↓↓↓↓
    terminal
    % ruby sample.rb
    
     1 : 2: 3
     4 : 5: 6
     7 : 8: 9
     10 : : 
    

    실천


    상기 each_나는 슬라이스 방법의 사용 방법에 대해 대체적으로 토론이 첨부되어 있다고 생각하지만, 사용 방법은 같다.
    컨트롤러의 동작 내 데이터베이스에서 모든 투고 정보를 얻고 실례 변수를 대입한 후 이 실례 변수에 대해 each_슬라이스 방법을 사용합니다.
    자신의 응용 프로그램에서 사용자 상세 페이지에 로그인한 사용자의 투고에 대한 모든 정보를 표시합니다.
    users_controller.rb
    def show
        @records = @user.records.order("date DESC")
        # ログインしユーザーの投稿を、選択した日付の降順で並び替えて全て取得
    end
    
    # @userには現在ログインしているユーザーの情報が代入されている。
    # userモデルとrecord(記録)モデルを扱っているが、一対多の関係になっている。
    
    show.html.erb
    <div class="card-space">
      <% @records.each_slice(3) do |record1,record2,record3| %>
        <div class="array-space">
    
          <% if record1 != nil %>
            <div class="card">
              <div class="date-wrapper">
                <% time1 = record1.date %>
                <div class="selected-date"><%= record1.date.strftime("%Y/%m/%d(#{@wd[time1.wday]})") %></div>
                <div class="last-updated-date">最終更新日時:<%= record1.updated_at.to_s(:datetime_jp) %></div>
              </div>
              <div class="skip-time-space">
                <label class="question-rabel">どのくらいサボった?</label>
                <div class="skip-time">
                  <%= "#{record1.time}分" %>
                </div>
              </div>
              <div class="text-space">
                <label class="question-rabel">何してた?</label>
                <div class="what-skip">
                  <%= record1.skip %>
                </div>
                <label class="question-rabel">何すべきだった?</label>
                <div class="to-do">
                  <%= record1.to_do %>
                </div>
              </div>
              <div class="update-btns">
                <%= link_to edit_record_path(record1.id), method: :get, class:"edit-link" do %>
                  <i class="far fa-edit fa-2x"></i>
                <% end %>
                <%= link_to record_path(record1.id), method: :delete, class:"delete-link" do %>
                  <i class="far fa-trash-alt fa-2x"></i>
                <% end %>
              </div> 
            </div> 
          <% end %>
    
          <% if record2 != nil %> 
            <div class="card">
              <div class="date-wrapper">
                <% time2 = record2.date %>
                <div class="selected-date"><%= record2.date.strftime("%Y/%m/%d(#{@wd[time2.wday]})") %></div>
                <div class="last-updated-date">最終更新日時:<%= record2.updated_at.to_s(:datetime_jp) %></div>
              </div>
              <div class="skip-time-space">
                <label class="question-rabel">どのくらいサボった?</label>
                <div class="skip-time">
                  <%= "#{record2.time}分" %>
                </div>
              </div>
              <div class="text-space">
                <label class="question-rabel">何してた?</label>
                <div class="what-skip">
                    <%= record2.skip %>
                </div> 
                <label class="question-rabel">何すべきだった?</label>
                <div class="to-do">
                  <%= record2.to_do %>
                </div>
              </div>
              <div class="update-btns">
                <%= link_to edit_record_path(record2.id), method: :get, class:"edit-link" do %> 
                  <i class="far fa-edit fa-2x"></i>
                <% end %> 
                <%= link_to record_path(record2.id), method: :delete, class:"delete-link" do %>
                  <i class="far fa-trash-alt fa-2x"></i>
                <% end %> 
              </div>
            </div>
          <% end %>
    
          <% if record3 != nil %>
            <div class="card">
              <div class="date-wrapper">
                <% time3 = record3.date %>
                <div class="selected-date"><%= record3.date.strftime("%Y/%m/%d(#{@wd[time3.wday]})") %></div>
                <div class="last-updated-date">最終更新日時:<%= record3.updated_at.to_s(:datetime_jp) %></div>
              </div>
              <div class="skip-time-space">
                <label class="question-rabel">どのくらいサボった?</label>
                <div class="skip-time">
                  <%= "#{record3.time}分" %>
                </div>
              </div>
              <div class="text-space">
                <label class="question-rabel">何してた?</label>
                <div class="what-skip">
                    <%= record3.skip %>
                </div>
                <label class="question-rabel">何すべきだった?</label>
                <div class="to-do">
                  <%= record3.to_do %>
                </div>
              </div>
              <div class="update-btns">
                <%= link_to edit_record_path(record3.id), method: :get, class:"edit-link" do %>
                  <i class="far fa-edit fa-2x"></i>
                <% end %>
                <%= link_to record_path(record3.id), method: :delete, class:"delete-link" do %>
                  <i class="far fa-trash-alt fa-2x"></i> 
                <% end %> 
              </div>
            </div>
          <% end %> 
    
        </div>
      <% end %>
    </div>
    
    
    실제로 일부 템플릿을 사용했기 때문에 일부 설명을 바꿨다.
    여기의 요점은 각 투고의 코드를 표시하는 것이다
    <% if record1 != nil %>
    
    <% end %>
    
    
    <% if record2 != nil %>
    
    <% end %>
    
    
    <% if record3 != nil %>
    
    <% end %>
    
    이렇게 하면 분할된 블록 변수가 nil이 아니면 표시되는 포위입니다.
    아까 each_slice 방법의 소개 예시에서 요소 수는 each_slice 방법으로 지정된 값을 할당할 수 없는 경우 마지막 단락에서만 요소 수가 줄어들지만 Rails에 위에서 설명한 대로 둘러싸여 있지 않으면 뷰 파일을 렌더링하는 동안 오류가 발생합니다.

    참고문

  • Qiita@ota-yuki"each_slice 방법의 사용법"
    https://qiita.com/ota-yuki/items/ad91ffa8e95108ba3ef7
    (2020년 12월 초경 열람)
  • 루비 참조 안내서 "instance method Enumerable#each_slice"
    https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_slice.html
    (2021년 1월 15일 열람)
  • 좋은 웹페이지 즐겨찾기