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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Q&A

解決済

2回答

3237閲覧

【Rails】ActiveRecord::StatementInvalid in Articles#index

taikoro

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/19 16:26

前提・実現したいこと

以下のサイトを見てTwitterを作成しています。
http://www.onseo.info/articles/9

11.フォロー機能実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

ActiveRecord::StatementInvalid in Articles#index Mysql2::Error: Unknown column 'follows.following_id' in 'where clause'

イメージ説明

該当のソースコード

<% if Follow.find_by(following_id: article.user.id ,followed_by_id: current_user.id) != nil || article.user.id == current_user.id %>

試したこと

調べてみると文字が列名と誤解されたためとの表記があった為、条件としての文字列を入力するため、シングルクォート、ダブルクォートで囲んでみるも改善は見られませんでした。
別の記事ではmysqlのカラムがないとのことで

SHOW CREATE TABLE User;

など試してみましたが詳細な情報は得られませんでした。

補足情報(FW/ツールのバージョンなど)

ruby 2.6.3p62
Rails 6.0.3.2
mysql Ver 14.14

以上です。
お気づきの点がありましたら、ご教授頂けると幸いです。

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

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

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

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

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

guest

回答2

0

![イメージ説明]

ここでの、follows テーブルがうまく作成できていない(スペルミスとかも含めて)ように見えます。

mysqlに接続して、desc follows というコマンドの結果に following_id というカラムは含まれているでしょうか?

投稿2020/07/20 00:44

ducci

総合スコア191

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

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

taikoro

2020/07/20 01:16

回答頂きありがとうございます。帰宅次第すぐ確認します!
taikoro

2020/07/20 10:28

途中ですが、調べた内容を追記します。 mysql> use tweeter_development; Database changed データベース切り替え。 mysql> show tables; followsのテーブルがある事を確認。 mysql> show columns from follows; +------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | created_at | datetime(6) | NO | | NULL | | | updated_at | datetime(6) | NO | | NULL | | +------------+-------------+------+-----+---------+----------------+ 結果、following_idはありませんでした。 これからカラムを作成し実行しようと思います。
ducci

2020/07/21 09:24

お、よかったです! 余談ですが、 `show create table follows` というコマンドがテーブル定義が見えておすすめです。
taikoro

2020/07/23 13:36

有益な情報ありがとうございます。これから役に立てていきたいと思います! コメントして頂きありがとうございました!
guest

0

ベストアンサー

調査の中にも出てきているように、Follow に following_id というcolumnがないと言う症状です。
schema.rb で Followにfllowing_id があるか確認しましたか?

投稿2020/07/19 20:03

winterboum

総合スコア23284

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

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

taikoro

2020/07/20 01:15

回答頂きありがとうございます。帰宅次第、すぐ確認します!
taikoro

2020/07/20 10:33

途中ですが、分かったことを追記します。 schema.rb create_table "follows", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end 結果、following_idはありませんでした。 following_idを作成するのですが、指定するカラムについてご教授頂けないでしょうか。
winterboum

2020/07/20 10:41

modelの関連定義がわからないので find_by(following_id: article.user.id ,followed_by_id: current_user.id) からの推定ですが following_id と followed_by_id を bigint(で失敗したら integer)で。
taikoro

2020/07/21 22:39

t.bigint "following_id", precision: 6, null: false を追加するするものと勘違いしていました。汗 mysql>ALTER TABLE テーブル名 ADD 新規カラム名 型情報 上記でカラム作成やってみます!
winterboum

2020/07/21 22:45

add_cplumn :following_id, :bigint ですね。 null optionはつけてもつけなくてもですが、precisionはつけないほうがよいです。
taikoro

2020/07/22 14:52

//カラム追加 mysql> alter table follows add following_id(6); mysql> alter table follows add followed_by_id(6); //テーブルカラム確認 mysql> describe follows; +----------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+-------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | created_at | datetime(6) | NO | | NULL | | | updated_at | datetime(6) | NO | | NULL | | | following_id | bigint(6) | YES | | NULL | | | followed_by_id | bigint(6) | YES | | NULL | | +----------------+-------------+------+-----+---------+----------------+ 5 rows in set (0.01 sec) 追加の確認をし、rails sでの動作確認も出来ました。 が、カラムをターミナルから追加した後schema.rbを見ると t.integer "following_id", precision: 6, null: false となっていたのですが、precisionがついていると何かしらの不備が出るのでしょうか?
winterboum

2020/07/22 23:00

idが6桁を超えると破綻します。 削除したデータを含めて100万件を越えない場合は発覚しません
taikoro

2020/07/23 13:33

そのような意味があるとは知らず、使用していました。。これからも精進したいと思います。 winterboum様 最後まで回答して頂きありがとうございました! 今回の件は無事エラー解消となりましたので、締め切りと致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問