前提・実現したいこと
Ruby on railsにて
Createメソッドでエラーが出てしまいDBに書き込みできません。
Infomationテーブルにpurchase_idを保存できようにしたいです。
発生している問題・エラーメッセージ
unknown attribute 'purchase_id' for Information.
該当のソースコード
app/models/PurchaseInformation.rb
ruby
1class PurchaseInformation 2 include ActiveModel::Model 3 attr_accessor :postcode,:city,:block,:building,:tell_num,:area_id ,:user_id,:item_id,:purchase_id 4 5 with_options presence: true do 6 validates :postcode,format: {with: /\A[0-9]{3}-[0-9]{4}\z/} 7 validates :tell_num,format: { with: /\A\d{11}\z/ , message: "is invalid. Include hyphen(-)" } 8 with_options numericality: { other_than: 1 } do 9 validates :area_id 10 end 11 end 12 13 def save 14 purchase = Purchase.create(user_id: user_id, item_id: item_id) 15 Information.create!(postcode: postcode, city: city, block: block, building: building, tell_num: tell_num, area_id: area_id, purchase_id: purchase.id) 16 end 17end
controllers/order.controllers.rb
ruby
1class OrdersController < ApplicationController 2 before_action :set_item 3 def index 4 @purchase_information = PurchaseInformation.new 5 @item = Item.find(params[:item_id]) 6 end 7 8 def create 9 @purchase_information = PurchaseInformation.new(order_params) 10 if @purchase_information.valid? 11 @purchase_information.save 12 redirect_to root_path 13 else 14 render :index 15 end 16 end 17 18 private 19 20 def order_params 21 params.require(:purchase_information).permit(:postcode, :area_id, :city, :block, :building, :tell_num ).merge(user_id: current_user.id, item_id: params[:item_id]) 22 end 23 def set_item 24 @item = Item.find(params[:item_id]) 25 end 26end
app/models/Purchase.rb
ruby
1class Purchase < ApplicationRecord 2 belongs_to :item 3 belongs_to :user 4 has_one :information 5end
app/models/Information.rb
class Information < ApplicationRecord belongs_to :purchase end
db/migrate/XXXX_create_informationrb
class CreateInformation < ActiveRecord::Migration[6.0] def change create_table :information do |t| t.string :postcode, null: false t.string :city, null: false t.string :block, null: false t.string :building, null: false t.string :tell_num, null: false t.integer :area_id, null: false t.references :purchase, null: false,foreign_key: true end end end
db/migrate/XXXX_create_purchases.rb
class CreatePurchases < ActiveRecord::Migration[6.0] def change create_table :purchases do |t| t.references :user, null: false,foreign_key: true t.references :item, null: false,foreign_key: true t.timestamps end end end
試したこと
マイグレーションファイル内のカラム名が一致しているかの確認
各モデル内のアソシエーションの記述確認
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー