質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1227閲覧

railsで同一ページ内のヘッダーと本文からリンクした際にリンク先の表示内容を変える方法を教えて頂けますでしょうか。

yuta66jp

総合スコア11

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/02/16 12:45

前提・実現したいこと

rails初心者です。
現在、練習としてecサイトの作成をしており、注文一覧ページへのlink元として3パターン考えており、1、ヘッダーからの遷移の場合全ての注文を表示、2、topページ内の本日の注文数をクリックした場合当日の注文を表示、3、顧客の詳細ページからは該当顧客の注文を表示するようにしたいです。

発生している問題・エラーメッセージ

現在、様々なサイトを参照しtopページの注文数から当日の注文、顧客の詳細ページからは顧客の注文を表示することは出来ましたが、topページの状態でヘッダーから注文一覧を表示しようとすると当日の注文が表示されます。topページでもヘッダーからの遷移では全件表示させたいです。(顧客詳細ページでも同様にヘッダーから遷移すると顧客の注文が表示されます)
教えていただけますでしょうか。

該当のソースコード

OrdersController

1def top 2 @count = Order.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).count 3 4 end 5 6 def index 7 @path = Rails.application.routes.recognize_path(request.referer) 8 9 if @path[:action] == "top" 10 @orders = Order.page(params[:page]).where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day) 11 12 elsif @path[:action] == "show" 13 @customer = Customer.find(@path[:id]) 14 @orders = @customer.orders.page(params[:page]) 15 16 else 17 @orders = Order.page(params[:page]) 18 19 end 20 21 end 22 23 def show 24 @order = Order.find(params[:id]) 25 @orderd_products = @order.orderd_products 26 end

header

1 <% elsif admin_signed_in? %> 2 <%=link_to admin_orders_top_path do %> 3 <%= image_tag 'logo.png' %> 4 <% end %> 5 <ul class="navbar-nav navbar-right"> 6 <li><%= link_to "商品一覧" , admin_products_path,class: "link" %></li> 7 <li><%= link_to "会員一覧" , admin_customers_path,class: "link" %></li> 8 <li><%= link_to "注文履歴一覧" , admin_orders_path,class: "link" %></li> 9 <li><%= link_to "ジャンル管理" , admin_genres_path,class: "link" %></li> 10 <li><%= link_to destroy_admin_session_path, method: :delete,class: "link" do %>ログアウト</li> 11 <% end %> 12 </ul>

top

1<div class="container"> 2 <div class="row"> 3 <h2>管理者画面</h2> 4 <p style="font-size:1.5em;">本日の注文数   <%= link_to @count, admin_orders_path %>件</p> 5 </div> 6</div> 7

customershow

1<div class="container"> 2 <div class="row"> 3 <div class="col-xs-10 p-6"> 4 <h3>会員詳細画面</h3> 5 <table class="table table-noborder"> 6 <tbody> 7 <tr> 8 <th>顧客ID</th> 9 <td> 10 <%= @customer.id %> 11 <!--%= @customer.is_deleted ? '退会済み' : '有効' %--> 12 <% if @customer.is_deleted? %> 13 <span class="btn btn-info">退会済み</span> 14 <% else %> 15 <span class="btn btn-info">有効</span> 16 <% end %> 17 </td> 18 </tr> 19 <tr> 20 <th>氏名</th> 21 <td><%= @customer.family_name %> <%= @customer.last_name %></td> 22 </tr> 23 <tr> 24 <th>フリガナ</th> 25 <td><%= @customer.family_name_kana %> <%= @customer.last_name_kana %></td> 26 </tr> 27 <tr> 28 <th>郵便番号</th> 29 <td><%= @customer.post_code %></td> 30 </tr> 31 <tr> 32 <th>住所</th> 33 <td><%= @customer.address %></td> 34 </tr> 35 <tr> 36 <th>電話番号</th> 37 <td><%= @customer.telephone_number %></td> 38 </tr> 39 <tr> 40 <th>メールアドレス</th> 41 <td><%= @customer.email %></td> 42 </tr> 43 <tr> 44 <td> 45 <a><%= link_to "編集", edit_admin_customer_path(@customer),class: "btn btn-info" %></a> 46 </td> 47 <td> 48 <a class="btn btn-success btn-sm" href="/admin/orders">注文履歴一覧を見る</a> 49 </td> 50 </tr> 51

ordersindex

1div class="container"> 2 <div class="row"> 3 <div class="col-xs-10 p-6"> 4 <h1>注文一覧画面</h1> 5 <table class="table"> 6 <thead> 7 <tr class="active"> 8 <th>購入日時</th> 9 <th>購入者</th> 10 <th>注文個数</th> 11 <th>注文ステータス</th> 12 </tr> 13 </thead> 14 15 <tbody> 16 <% @orders.each do |order| %> 17 <tr> 18 <td><%= link_to order.created_at.strftime("%Y年%m月%d日%H時%M分%S秒 "), admin_order_path(order.id) %></td> 19 <td><%= order.customer.family_name %><%= order.customer.last_name %></td> 20 <%# @orderd_product.each do |o| %> 21 <td><%# o.quantity %></td> 22 <td><%= order.order_status %></td> 23 </tr> 24 <% end %> 25 </tbody> 26 27 </table> 28 </div> 29 </div> 30 <%= paginate @orders, class: "paginate" %> 31</div> 32

試したこと

様々なサイトを参考にし、
@path = Rails.application.routes.recognize_path(request.referer)
上記のコードを使用して遷移元の情報を所得しております。
しかし、topページ、顧客詳細ページのヘッダーから全件表示が出来ず困っております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私も初心者ですのでこれよりいい方法もあるかもしれませんが、思いついたやり方としては、

erb

1<%= link_to "注文履歴一覧" , admin_orders_path(order: 'all'), class: "link" %>

このようにリンクから変数を渡してやったらいいのではないかと思いました。この方法を使うなら、orders_controller.rbで

rb

1case params[:order] 2when 'today' 3 @orders = Order.page(params[:page]).where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day) 4when 'customer' 5 customer_id = Rails.application.routes.recognize_path(request.referer)[:id] 6 @customer = Customer.find(customer_id) 7 @orders = @customer.orders.page(params[:page]) 8when 'all' 9 @orders = Order.page(params[:page]) 10end

こんな分岐ができるかなと思います。

投稿2020/02/17 06:35

編集2020/02/18 02:34
aiandrox

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuta66jp

2020/02/17 14:48

回答ありがとうございます。早速、試してみましたが下記のエラー文が表示されうまく行きませんでした。 NoMethodError in Admin::Orders#index undefined method `each' for nil:NilClass うまくordersの情報を取得出来ていないようです。原因がわかりますでしょうか。
aiandrox

2020/02/17 14:57

コントローラの分岐の前に`debugger`を記述して、ログから`params`の値を確認してみてください! もしparamsに`order: 'all'`と書かれていない場合は、link_toで変数が渡せていないということになります。
yuta66jp

2020/02/17 15:11

コメントありがとうございます。 確認しましたところ、 pry(#<Admin::OrdersController>)> params => <ActionController::Parameters {"controller"=>"admin/orders", "action"=>"index"} permitted: false> とのことでうまく渡せていないようです。
aiandrox

2020/02/17 15:19

<%= link_to "注文履歴一覧" , admin_orders_path(order: 'all'), class: "link" %> すみません、変数の記述方法を間違えていました。こちらでどうでしょうか。
yuta66jp

2020/02/17 15:33

無事に解決することが出来ました! コメントいただいた通り修正し値も取得できております。 [1] pry(#<Admin::OrdersController>)> params => <ActionController::Parameters {"order"=>"all", "controller"=>"admin/orders", "action"=>"index"} permitted: false> ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問