前提・実現したいこと
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でエラーが出ています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 09:39 編集
2020/05/11 09:50