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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1703閲覧

Ruby unknown attributeエラーの解決

ka012

総合スコア2

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2021/06/17 19:37

前提・実現したいこと

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/ツールのバージョンなど)

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

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

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

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

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

asm

2021/06/17 23:28

migrationを実行しエラーがないことは確認しているのでしょうか?
ka012

2021/06/17 23:31

確認できています!
winterboum

2021/06/18 03:38

db/schema.rb での確認もしてください
guest

回答1

0

自己解決

結果としてInformationモデルのマイグレーションファイルが複数形でないことが原因でした。
Informationという名前ではrails g model時にマイグレーションが複数形で作成されず、エラーとなっていたようです。Infomationsに名前を変更したところ、次はテーブルがないよ!というエラーが発生しましたので、モデル名をInfoに変更した所問題なく作動しました。

投稿2021/06/18 20:36

ka012

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問