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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

1072閲覧

指定したジャンルのリンク先に飛びたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/29 11:12

実現したいこと

カテゴリーの一覧からリンク化したカテゴリーを踏むと、踏んだカテゴリーに該当する投稿の一覧を表示させたいです
イメージ説明

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

表示しているリンクを踏むと以下のエラーがでます

wrong number of arguments (given 2, expected 0..1)

該当のソースコード

関連ファイル

erb

1 2class Book < ApplicationRecord 3 extend ActiveHash::Associations::ActiveRecordExtensions 4 acts_as_taggable 5 belongs_to_active_hash :category 6 belongs_to_active_hash :status 7 belongs_to :user 8 has_one_attached :image 9 with_options presence: true do 10 validates :name 11 validates :price, numericality: { greater_than_or_equal_to: 150, less_than_or_equal_to: 9_999_999 } 12 validates :category_id 13 validates :status_id 14 validates :user 15 validates :author 16 end 17 validates :category_id, :status_id, numericality: { other_than: 1 } 18 def self.category(category) 19 if 1 < category.to_i && category.to_i < 19 20 Category.where('category_id LIKE(?)',"%#{category}%") 21 else 22 Category.all 23 end 24 end 25end

エラー画面で表示されるコード

erb

1 def self.category(category) 2 if 1 < category.to_i && category.to_i < 19 3 Category.where('category_id LIKE(?)',"%#{category}%") 4 else 5 Category.all 6 end 7 end

一応関連するかもと思ったので載せておきます

class BooksController < ApplicationController def index @books = Book.order('created_at DESC') if params[:tag] @books = Book.tagged_with(params[:tag]) else @books = Book.all end @categorys = Category.where.not(id: 1) end def new @book = Book.new @tags = ActsAsTaggableOn::Tag.all end def category @books = Book.category(params[:id]) end def create @book = Book.new(book_params) if @book.save redirect_to root_path else render :new end end private def book_params params.require(:book).permit(:name, :price, :category_id, :status_id, :tag_list, :text, :author, :image).merge(user_id: current_user.id) end end
Rails.application.routes.draw do devise_for :users resources :books do member do get 'category' end end root to: 'books#index' get 'tags/:tag', to: 'books#index', as: :tag end

試したこと

質問できる人もおらず知識もないので解決案が見つけられず力を貸していただけたらと思いました

補足情報(FW/ツールのバージョンなど)

ruby 2.6.5
rails 6.0.0

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

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

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

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

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

hatsu

2020/09/30 02:07

エラーになるページのViewのコードはありますか?載せていただけると参考になるかもです
退会済みユーザー

退会済みユーザー

2020/09/30 02:28

category.html.erb <%= @books.each do |book| %> <%= book.name %> <% end %> まだ内容は詳しく書いていないのでこれだけですがお願いします
hatsu

2020/09/30 02:34

<%= @books.each do |book| %> ここは=がいらないので <% @books.each do |book| %>ですね。 wrong number of arguments (given 2, expected 0..1)のエラーが出ている場所、ログを見るとどのファイルの何行目とか書かれているかと思うのですがわかりますでしょうか。 エラー内容としては、引数が0か1個であるべきなところに2個渡しているのが原因です。質問内では該当の箇所がまだ見つけられず。
退会済みユーザー

退会済みユーザー

2020/09/30 02:42

app/models/book.rb:20:in `category' 18 def self.category(category) 19 if 1 < category.to_i && category.to_i < 19 20 Category.where('category_id LIKE(?)',"%#{category}%") 21 else 22 Category.all 23 end 24 end app/controllers/books_controller.rb:44:in `category' 43 def category 44 @books = Book.category(params[:id]) 45 end ログではここでwrong number of arguments (given 2, expected 0..1)と出ています。 よろしくお願いします
hatsu

2020/09/30 03:02

belongs_to_active_hashのcategoryとdef self.category(category)でcategoryの名前が衝突しているのが気になりますね。 Book.category(params[:id])でやりたいことはと以下のようなことだったりしますか if 1 < params[:id].to_i && params[:id].to_i < 19 Book.where(category_id: params[:id]) else Book.all end
退会済みユーザー

退会済みユーザー

2020/09/30 03:28

if 1 < category.to_i && category.to_i < 19 Book.where(category_id: category) else Book.all end で書き換えたらうまくいきました!ありがとうございます!
guest

回答1

0

ベストアンサー

belongs_to_active_hashのcategoryとdef self.category(category)でcategoryの名前が衝突が原因のようです。
質問をしていく中で解決したので以下、回答を記載します。

if 1 < params[:id].to_i && params[:id].to_i < 19 Book.where(category_id: params[:id]) else Book.all end

投稿2020/09/30 03:30

hatsu

総合スコア1809

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問