前提・実現したいこと
rails で情報共有掲示板を作成中です。
ある金融機関のあるカテゴリーに対して、その内容を登録したいのですが、
エラーが発生し、解決できていない状況です。
※テーブルはユーザー・金融機関・カテゴリー・コンテンツの4つです。
イメージとしては、「A銀行」の「残高」は「5000円」と登録したいのですが、できていません。
発生している問題・エラーメッセージ
該当のソースコード
ContentsController
1class ContentsController < ApplicationController 2 3 def index 4 @banks = Bank.all #サイドバーに必要(共通) 5 @content =Content.new 6 @bank = Bank.find(params[:bank_id]) 7 @contents = @bank.contents 8 @categories = @bank.categories.select(:subject) 9 end 10 11 def new 12 @content = Content.new 13 @banks = Bank.all #サイドバーに必要(共通) 14 @bank = Bank.find(params[:bank_id]) 15 @categories = @bank.categories.select(:subject) 16 @category = Category.find(params[:category_id]) 17 end 18 19 def create 20 @bank = Bank.find(params[:bank_id]),Category.find(params[:category_id]) 21 @test = Bank.find(params[:bank_id]) 22 @categories = @test.categories.select(:subject) 23 @content = @bank.contents.new(content_params) 24 if @content.save 25 redirect_to bank_contents_path(@bank),notice: "登録しました。" 26 else 27 @contents = @bank.contents.includes(:category) 28 redirect_to bank_contents_path(@bank),notice: "登録に失敗しました。" 29 end 30 end 31 32 private 33 def content_params 34 params.require(:content).permit(:detail,:bank_id,:category_id,:user_id).merge(user_id: current_user.id) 35 end 36end
登録フォームのあるHTML
new
1<div class="wrapper"> 2 3 <div class="side-bar"> 4 <%= render "categories/side_bar" %> 5 </div> 6 7 <div class="page-header"> 8 <div class="header-title"> 9 <%= @bank.name %> 10 </div> 11 <% if flash[:notice] %> 12 <p><%= flash[:notice] %></p> 13 <% end %> 14 </div> 15</div> 16 17 <div class="content"> 18 <div class="category_detail"> 19 <div class="group"> 20 <%= @category.subject %> 21 <%= form_with model: [@bank,@category,@content], class: 'form', local: true do |f| %> 22 <div class="form-input"> 23 <%= f.text_field :detail, class: 'form-message', placeholder: '最新情報を登録' %> 24 <%= f.submit '登録', class: 'form-submit' %> 25 </div> 26 <% end %> 27 </div> 28 </div> 29 </div>
登録フォームへ遷移するHTML
index
1<div class="wrapper"> 2 3 <div class="side-bar"> 4 <%= render "categories/side_bar" %> 5 </div> 6 7 <div class="page-header"> 8 <div class="header-title"> 9 <%= @bank.name %> 10 </div> 11 <% if flash[:notice] %> 12 <p><%= flash[:notice] %></p> 13 <% end %> 14 </div> 15</div> 16 17 <div class="content"> 18 <div class="category_detail"> 19 <% @bank.categories.each do |category| %> 20 <div class="group"> 21 <%=link_to category.subject,new_bank_category_content_path(@bank.id ,category.id) %> 22 <%= @content.detail %> 23 </div> 24 <% end %> 25 </div> 26 </div>
ルーティング
routes
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "categories#index" 4 resources :users, only: [:edit, :update] 5 resources :categories, only: [:new, :create] 6 resources :banks, only: [:new, :create, :destroy, :edit, :update] do 7 resources :contents, only: [:index, :create, :new] 8 end 9 10 resources :banks, only: [:new, :create, :destroy, :edit, :update] do 11 resources :categories, only: [:new, :create] do 12 resources :contents, only: [:index, :create, :new] 13 end 14 end 15end 16 17 18```テーブル設計 19banks(金融機関)テーブル 20|id|name| 21|:--:|:--:| 22|1|A銀行| 23 24categories(カテゴリー)テーブル 25|id|subject| 26|:--:|:--:| 27|1|残高| 28|2|商品名| 29 30bank_categories(中間)テーブル 31|id|bank_id|category_id| 32|:--:|:--:|:--:| 33|1|1|1| 34|2|1|2| 35 36contents(内容)テーブル 37|id|detail|bank_id|category_id|user_id| 38|:--:|:--:|:--:|:--:|:--:| 39|1|5000円|1|1|1| 40|2|Aローン|1|2|1| 41 42モデル 43```bank 44class Bank < ApplicationRecord 45 has_many :bank_categories 46 has_many :categories, through: :bank_categories 47 has_many :contents 48 49 validates :name, presence: true 50 validates :name, uniqueness: true 51end
category
1class Category < ApplicationRecord 2 has_many :bank_categories 3 has_many :banks, through: :bank_categories 4 has_many :contents 5 6 validates :subject, uniqueness: true 7 validates :number, uniqueness: true 8end
bankcategory
1class BankCategory < ApplicationRecord 2 belongs_to :bank 3 belongs_to :category 4end
content
1class Content < ApplicationRecord 2 belongs_to :bank 3 belongs_to :category 4 belongs_to :user 5 6 validates :detail, presence: true 7 validates :bank_id, presence: true 8 validates :category_id, presence: true 9 validates :user_id, presence: true 10end
※上記テーブルのように情報が登録できればベストだと考えています。
試したこと
@contentが正しく設定できていないのではないかと思いましたがうまくいきませんでした。
※IDをとる必要があると考え、ルーティングを今回のように設定しております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/21 14:26
2021/03/21 15:52
2021/03/21 22:20
2021/03/21 23:20
2021/03/21 23:32
2021/03/22 11:05
2021/03/22 12:05
2021/03/22 14:32