質問の前にテーブルの構成を示します。

構成

テーブル

  • users … ユーザ情報を保持するテーブル
  • entries … はてなブックマークのエントリー情報を保持するテーブル
  • laters … ユーザが”あとで読む”に設定したエントリー情報を保持するテーブル

リレーション

  • users … has_many :laters
  • entries … has_many :laters
  • laters … belongs_to :user、belongs_to :entry

質問

ユーザに紐づくlatersテーブルのレコードを削除する実装がうまくいきません。
削除の実装は簡略化すると、下記のようになります。

実装

User.find(1).laters.where({:entry_id => 1}).first.destroy

この実装で動かすと下記のようなSQLが発行されます。

発行されるSQL

DELETE FROM laters WHERE laters.'' = NULL

latersのレコードが取得できていないのかと思い確認しましたが、レコードは取得されていました。
何が原因で不完全なSQLとなっているか分かりますでしょうか。


ソースコード

Githubにソースコードを上げています。
https://github.com/hogesuke/tech-book

該当箇所

https://github.com/hogesuke/tech-book/blob/master/app.rb#L221