私はRailsチュートリアルのSection 11.3.1に属しています。すべてのテストはそれ以前に行われていました。その後、マイクロポストフィードを持つホームページが次のエラーで破損します。RailsTutorial 3.2 Ch 11 - PostgreSQL構文エラーによりステータスフィードが破損する
PG::Error: ERROR: invalid input syntax for integer: "98, 1"
LINE 1: ...CT COUNT(*) FROM "microposts" WHERE (user_id IN ('98, 1') O...
^
: SELECT COUNT(*) FROM "microposts" WHERE (user_id IN ('98, 1') OR user_id = 101)
また、いくつかのテストでも同様の問題が発生します。 、今
1) Authentication authorization as wrong user visiting Users#edit page
Failure/Error: before { visit edit_user_path(wrong_user) }
ActionView::Template::Error:
PG::Error: ERROR: invalid input syntax for integer: ""
LINE 1: ...CT COUNT(*) FROM "microposts" WHERE (user_id IN ('') OR use...
^
を私の代わりにデフォルトSQLite3のではPostgreSQLを使用していますので、それは構文の競合があることかもしれないが、私は肯定的ではないよ。ここでは最初のものです。私はPostgresに精通していません(ただHerokuをクリーナーにするために使っています)。
ホームページの誤差はIDが引用符でクエリに渡されてから来ているように見えます - 私は、いくつかのクエリをテストするためにはpsqlに入り、これが成功する:これは失敗しながら
SELECT "microposts".* FROM "microposts" WHERE "microposts"."id" IN (1,2,3);
:
SELECT "microposts".* FROM "microposts" WHERE "microposts"."id" IN ('1,2,3');
そしてスペックエラーも失敗しこれと同等渡される空の配列、から来ている:
SELECT "microposts".* FROM "microposts" WHERE "microposts"."id" IN ('');
PostgreSQLの構文に精通している人なら、この問題を解決するためにメソッド定義を書き直す方法を教えてください。
micropost.rb
の現在の方法は、次のようになります。
def self.from_users_followed_by(user)
followed_user_ids = user.followed_user_ids.join(', ')
where("user_id IN (?) OR user_id = ?", followed_user_ids, user)
end
と `users.rb」からの呼び出しは次のようになります。
def feed
Micropost.from_users_followed_by(self)
end
'IN(...) 'リストを作成するときに準備された文が失敗する - 作成者がむしろ愚かであり、カンマで区切られたリストでなければならないことを理解していない。データ。 –