私はプッシュ通知を使用し、他の人と同じようにデバイストークンを保存します。まず、それらをアプリの文字列に変換します。
NSString *deviceTokenString = [[[token description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" " withString:@""];
次に、それらをサーバーに配置します。ここで、ActiveRecordはそれらをcharacter varying(255)
列に格納します。
Device.where(:token => device_token, :username => username).first_or_create!(:model => model)
2つのトークンが同じでないことを確認する検証があります。これは、常に当てはまるはずです。
class Device < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :token
end
ただし、トークンの一意性の検証エラーが発生し始めました。
ActiveRecord::RecordInvalid: Validation failed: Token has already been taken
psqlの手動クエリは、デバイスが別のユーザーの下ですでにテーブルにあるトークンに登録しようとしていることを確認します。これは不可能ではないでしょうか?トークンを切り捨てて変換する方法に何か問題がありますか?問題が最初に発生したときに見つけたすべてのコード例を確認しましたが、誰もが最初のコードサンプルにリストした方法を使用しているようです。