私はredditに似たシンプルなupvote/downvoteシステムを作成しています。ユーザーは何かをupvote/downvoteして、必要に応じて変更することができます。Railsコントローラがクエリを無視しています
私のコントローラの「作成」アクションにAJAX呼び出しを行うページがあります。コントローラーは、レコードを作成して、適切なjs.erbを返すのに問題はありません。しかし、私は既存の投稿が存在するかどうかを確認したいと思います。もしそうなら、私はそれを破壊したいと思います。私のコントローラは、次のようになります。
def create
@vote = GameVote.new
@vote.game_id = params[:game_id]
@vote.vote = params[:vote]
@vote.user_id = session[:user_id]
existing_vote = GameVote.where(whatever)
respond_to do |format|
if @vote.save
format.js
end
end
end
ちょうどそれが新しいエントリを保存しようとする前に存在している場合、それを破壊するから私を防止し、中央のクエリを無視しているようです。何か案は?
あなたの質問は正確には何ですか?既存の投票を見つけるには?それを削除するには?表示しているコードから何が問題なのかは非常に不明です。 – Mischa
Hey @Mischa - existing_vote = GameVote.where(何でも)は解雇されません。サーバーコンソール内では、実行されているクエリが表示されず、理由を特定できません。適切な議論で、それはレールコンソールでうまく動作しますが、コントローラは実際にはそれを無視しているようです。私はなぜそれが不思議です。 – opticon
これは、Railsは必要なときにのみクエリを実行するためです。 'existing_vote'で何もしないので、クエリは実行されません。これは、Railsの組み込み最適化です。 – Mischa