ruby-on-rails - クエリが正しいにもかかわらず、Activerecordは属性によってモデルを見つけることができません

ruby-on-rails ruby-on-rails-3 sqlite activerecord

Invitationという属性を持つcodeというモデルがあります。アプリケーションの目標は、どこかに入力されたコードで正しい招待状を見つけることです。

しかし、私の問題は、入力が正しいにもかかわらず、データベースでクエリを実行しているときにActiveRecordが結果を見つけられないように見えることです。問題を説明するために、この小さなテストを作成しました。

ruby-1.9.2-p290 :003 > code = Invitation.first.code
Invitation Load (0.4ms)  SELECT "invitations".* FROM "invitations" LIMIT 1
=> "86f50776bf" 


この時点で、この招待のコードを変数にロードしました

ruby-1.9.2-p290 :004 > i = Invitation.where(:code => code)
Invitation Load (0.2ms)  SELECT "invitations".* FROM "invitations" WHERE "invitations"."code" = '86f50776bf'
=> [] 


また、コードはデータベースから直接取得されますが、クエリの応答は空の配列です。 code == Invitation.first.codeを使用して値が等しいかどうかを確認すると、trueが返されます。 Rubyとデータベースの両方のデータ型を確認しましたが、すべて文字列です。

何が原因ですか?どうすれば修正できますか?
答え
コメントに基づいて、列がVARCHARではなくCHARであるか、ActiveRecord ORMレイヤーまたはデータベースドライバーによってトリミングされている末尾のスペースが列に含まれている可能性があります。 'foo''foo 'は同等ではありませんが、一致するのに十分なLIKEです。

その列を可変長に切り替えるか、クエリを調整してテストすることができます:RTRIM(code)=?
関連記事

ruby-on-rails - カスタム戦略内のRails 3 Deviseリダイレクト

ruby-on-rails - RSpec 2を使用したRails 3.1エンジンルートのテスト

ruby-on-rails - HerokuのステージングインスタンスによるCarrierwaveストレージパス管理

ruby-on-rails - クラスターでのRails、gmaps4railsの問題

ruby-on-rails - accepts_nested_attributes_forの使用時に失敗した作成アクションで新しいテンプレートにパラメーターを渡す

ruby-on-rails - 同じ名前のクラス

ruby-on-rails - rspecでクエリ文字列を指定する

ruby-on-rails - submit_tagはhidden_​​fieldを実行します-データを保存しますか?

c# - SAVON(ROR)SOAPヘッダーをC#サービスの要件に一致させるにはどうすればよいですか?

ruby-on-rails - Prawn::Documentにはmake_tableメソッドはありません