railsで現在開発中のシステムにカテゴリーの商品を選んで"次へ"を押すと次のカテゴリーIDに紐づいている商品を表示させる機能を実装したいです。
情報を探すとmodelに、現在IDより大きいものIDを出すというインスタンスメソッドを作り、link_toのパスの引数にて使用するという方法があった為コントローラーにて試したのですが、機能しておりません。
如何にして次のIDのカテゴリーの商品を表示するれば良いでしょうか。
ご教示お願い致します。
・ログメッセージ
Completed 200 OK in 7ms (Views: 0.9ms | ActiveRecord: 1.1ms)とログが残っています。
ログの参照IDを見ると次のカテゴリーではなく、現在のカテゴリーでfindされています。
・検証してみたこと
viewにlink_toでコントローラーと同じくパスの引数にインスタンスメソッドを用いてみましたが、上記と同じ結果になります。
link_toのurlを検証で見てみると <a data-remote="true" href="/~~~~~/cat.61">次へ</a>となっており、コンソールで確認しましたがそのmasterの持つ次のカテゴリーIDが表示されています。
モデルの関連性
class Master < ApplicationRecord has_many : categories end class Category < ApplicationRecord has_many : items belongs_to :master end class Item< ApplicationRecord belongs_to :category end
カテゴリーモデルの記述
class Category < ApplicationRecord def next master.categories.where("id > ?", self.id).order("id ASC").first end end
コントローラー
def cat #サイドバーからリンクを押された場合の商品表示 if params[:category_id] @cat = Category.find(params[:category_id].to_i).id @item = @cat.items.all else #前アクションから飛んだ場合の商品表示 @cat = master.category.first @item = @cat.items.all end def cat2 #次へボタンを押したらhidden_fieldでsubmitという情報をアクションに送って次のカテゴリへ行く if params[:submit] redirect_to cat_path(@cat.next) end end
view
<%= form_with url:cat2_path, method: :post do |f| %> <%= hidden_field_tag :submit, true %> <%= submit_tag "次へ" %> <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/09 23:34