前提・実現したいこと
Ruby(Rails5)でイラストを投稿するAPIを作っています。
外部からAPIを呼び出した際に、JSON形式でポストのデータを返す所を確認したかったので、
ひとまずRailsコンソールからデータを登録することにしました。
後ほどソースコードを示しますが、ポスト(post)のデータを記録するためには、紐付けるユーザー(user)とテーマ(theme)が必要なのでRailsコンソールからそれぞれ2つずつデータを登録してあります。
その後それらと紐付けてポストのデータを登録しようとしたところ以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
pry(main)> Post.create(title:'test',content:'testtest',illust:'test.png',user_id:1,theme_id:1) (0.1ms) begin transaction User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Theme Load (0.1ms) SELECT "themes".* FROM "themes" WHERE "themes"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] (0.1ms) rollback transaction
該当のソースコード
Ruby
1#schema.rb 2ActiveRecord::Schema.define(version: 20200423053204) do 3 4 # 5 # そのほかのテーブル 6 # 7 8 #ポストモデル 9 create_table "posts", force: :cascade do |t| 10 t.string "title" 11 t.string "content" 12 t.string "illust" 13 t.integer "user_id" 14 t.datetime "created_at", null: false 15 t.datetime "updated_at", null: false 16 t.integer "theme_id" 17 t.index ["theme_id"], name: "index_posts_on_theme_id" 18 t.index ["user_id"], name: "index_posts_on_user_id" 19 end 20 21 #テーマモデル 22 create_table "themes", force: :cascade do |t| 23 t.string "theme" 24 t.datetime "created_at", null: false 25 t.datetime "updated_at", null: false 26 end 27 28 #ユーザーモデル 29 create_table "users", force: :cascade do |t| 30 t.string "name" 31 t.string "email" 32 t.string "password_digest" 33 t.datetime "created_at", null: false 34 t.datetime "updated_at", null: false 35 end 36 37end
Ruby
1#user.rb 2class User < ApplicationRecord 3 has_many :posts, dependent: :destroy 4 5 # ↓ バリデーション諸々 ↓ # 6end
Ruby
1#theme.rb 2class Theme < ApplicationRecord 3 has_many :post, dependent: :destroy 4end
Ruby
1#post.rb 2class Post < ApplicationRecord 3 belongs_to :user 4 belongs_to :theme 5 has_many :likes, dependent: :destroy 6 7 #タイトルのバリデーションは不要(自動で挿入予定) 8 9 #コンテントのバリデーション 10 validates :content, length: {maximum: 100} 11 12 #イラストのバリデーション 13 validates :illust, inclusion: { in: %w(jpg jpeg png JPG JPEG PNG), 14 message:"%{value} の拡張子は無効です" } 15 #今後画像サイズのバリデーション 16 17 validates :user_id, presence: true 18 validates :theme_id, presence: true 19 20end
試したこと
SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]についてググりましたが進展はありませんでした。
何気なくSQLを実行してみたところもう少し深い?エラーが出てきたので
SyntaxError: unexpected tCONSTANT, expecting end-of-inputでググりましたが、余り進展はなくとにかくWHEREのところで終わることを期待しているんだなとわかりました。
[10] pry(main)> SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] SyntaxError: unexpected tCONSTANT, expecting end-of-input ...T "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [[... ... ^~~~~ [10] pry(main)> SELECT "themes".* FROM "themes" WHERE "themes"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] SyntaxError: unexpected tCONSTANT, expecting end-of-input ... "themes".* FROM "themes" WHERE "themes"."id" = ? LIMIT ? [... ... ^~~~~
補足情報(FW/ツールのバージョンなど)
cloud9を使用しております。
Cloud9User:~/environment/Irasta (controller) $ sqlite3 --version 3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668 Cloud9User:~/environment/Irasta (controller) $ rails -v Rails 5.1.6
自分でももう少し粘ろうと思いますが、目星がございましたらご教授願います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。