レコードの単一の属性を更新する(「アクティブな」ブール値をtrueに設定する)ボタンを実装しようとしています。オンラインで調べた後、問題を「解決」するための次のコードを見つけました。
button_to "Add", movie_path(m, active: true), confirm: "Add this movie?", method: :put, class: "btn"
ビューはボタンを適切に作成し、アプリケーションはコマンドを適切に実行し、MoviesControllerの「更新」アクションを実行します。
def update
@movie = Movie.find(params[:id])
if @movie.update_attributes(params[:movie])
flash[:notice] = "Movie was successfully updated"
else
flash[:error] = "Movie was not changed"
end
redirect_to root_path
end
このボタンを繰り返しクリックし、Thinking Sphinxエンジンを数回再起動した後(オブジェクトが「非アクティブなムービー」テーブルにまだ表示されている理由は、コレクションのインデックスを再作成する必要があるためです)、コンソールの出力を確認しました(私はそれがそれが呼ばれているものだと思います。それはすべてのstarted GET "/assets..."
マンボジャンボを撃ち抜くのはただのstdoutであり、私はこれを見ました:
Started PUT "/movies/334?m%5B%3Aactive%5D=true" for 127.0.0.1 at 2013-01-10 22:41:41 -0600
Processing by MoviesController#update as HTML
Parameters: {"authenticity_token"=>"qpcfMEVttjnQJ3Cv2f+tTYBu3/gujijQtn2+17YVPno=", "m"=>{":active"=>"true"}, "id"=>"334"}
Movie Load (0.4ms) SELECT `movies`.* FROM `movies` WHERE `movies`.`id` = 334 LIMIT 1
(0.1ms) BEGIN
Movie Exists (0.6ms) SELECT 1 AS one FROM `movies` WHERE (`movies`.`title` = BINARY '1 Hope' AND `movies`.`id` != 334 AND `movies`.`rec_form` = 'DVD-Rom') LIMIT 1
(0.2ms) COMMIT
Redirected to http://0.0.0.0:3000/
Completed 302 Found in 114ms (ActiveRecord: 1.3ms)
そのMovieExistsラインをチェックしてください。WHERE ... movies.id != 334
...そのすぐ上の行がそのIDを使用してレコードを検索している場合でも。それは悪いようですよね?私がここに投稿したコードを見ているだけで、関連するmovie.idと一致しないレコードを更新しようとするために私が行っていることを誰かが見ることができますか?このコードによって他のレコードが壊れているのを見たことがありません。検査のために追加のファイルが必要な場合は、私に知らせてください。