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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

978閲覧

rails saveメソッドについて教えてほしい

masoma

総合スコア7

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2020/05/10 08:37

編集2020/05/10 10:30

前提・実現したいこと

railsで記事に付随するタグの作成
saveメソッドのエラー原因

アソシエーションの勉強のためタグの作成をやっています。
コード上から参照しなくなったはずのカラムが原因でエラーが出ており、対処法がわかりません。

前提として記事に対して、カテゴリー(大項目のタグ) タグ(小項目のタグ)のように作っていました。
最初は全てのデータを最初はLibraryモデル(記事)に格納しlib_category_idとtag_idもLibraryモデルに格納して作っていたのですが、(以下のような形)
librariesテーブル
id title body lib_category_id tag_id created_at updated_at
アソシエーションというものがあることを知ったのでそれを活用し中間テーブルを経由する形に変更しました。

エラーもなかなか解決せずいきなり複雑にしすぎたと感じたのでカテゴリーをなくし、
単純に記事:タグの多:多の関係性にしました。

変更前
記事:カテゴリー  多:多
記事:タグ   多:多
カテゴリー:タグ 1 :多

変更後(ソース上からカテゴリーに関するコードを消した)
記事:タグ   多:多

そもそもの考え方の根底から間違えっている可能性はあるとも思うのですが、後学のためなぜsaveメソッドがソースコード上で参照しなくなった(?)lib_category_idでエラーを出しているのか、ということをメインに解決方法を教えていただきたいです。
よろしくお願い致します。

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

undefined method `lib_category_id' for #<Library:0x00007f2eb48d2270> Did you mean? lib_tag_ids Parameters: {"authenticity_token"=>"hA8xil3FDYGH96iUthrBadeF5fscaw2MzMpENwSeszWMyjFVh+EBfWYBux6ppE201hLPekgEYLTciYv+yJineA==", "library"=>{"title"=>"たいとる", "tags"=>{"tag"=>"2"}, "overview"=>"がいよう", "body"=>"せつめい"}, "commit"=>"作成"}

該当のソースコード

(lib_categoryに関する部分のソースコードは削除済み)

model

1library 2 has_many :lib_tags, dependent: :destroy 3 has_many :tags, through: :lib_tags, source: :tag 4 5tag 6 has_many :lib_tags, dependent: :destroy 7 has_many :libraries, through: :lib_tags 8 9lib_tag 10 belongs_to :library 11 belongs_to :tag 12

controller

1 def new 2 @library = Library.new 3 @library.tags.build 4 end 5 6 def create 7 @library = Library.new(lib_params) 8 @library.user_id = current_user.id 9 if @library.save(ここで該当のエラーメッセージ) 10 redirect_to libraries_path 11 else 12 # エラーであればフォームにエラーメッセージを表示 13 render 'new' 14 end 15 end 16

【現状のテーブル】

libraries(記事に該当する)テーブル
id title body created_at updated_at overview user_id

tagsテーブル
id tag created_at updated_at

lib_tags(中間テーブル)
id library_id tag1_id tag2_id tag3_id created_at updated_at

※以下ソースコード上関係するコードは削除済み。(modelは残っている)
lib_categories
id cat created_at updated_at

lib_cats(中間テーブル)
id library_id lib_category_id created_at updated_at

試したこと

lib_category_idに関連するソースコードを全て削除。librariesとtagsだけの多対多の関係性のみに修正。
サーバーの再起動。

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

なし

###追記
いっそのことエラー原因のカテゴリーに関するlib_categoryのmodel・tableを全て削除してみたのですが、存在しないlib_category_idでエラーが出ています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1@library = Library.new(lib_params)

lib_paramsの定義を確認してみてください。ここで存在しない列まで値を与えていたりはしませんか?

投稿2020/05/10 08:46

maisumakun

総合スコア145184

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

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

masoma

2020/05/10 09:39 編集

controller private def lib_params params.require(:library).permit(:title, :body, :overview, :user_id) end のようになっているため問題ないと思うのですがどうでしょうか
masoma

2020/05/11 09:50

申し訳ありません。バリデーションが前の状態のままだったためエラーになっていたようです。 やはり存在しない列を指定してエラーが出ていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問