0

usersという空のテーブルがあります。次の方法で新しいユーザーを作成します。

User.create :fb_id => fb_id

エントリが正常に作成されます。

次に、次の方法でクエリを実行します。

User.first(:include => :cookies, :conditions => {:cookies => {:opened => false} , :fb_id => fb_id})

戻りますnil!!

テーブルを確認すると、ユーザーがそこにいます。そこで、次の方法で新しい重複ユーザーを作成します。

User.create :fb_id => fb_id

これで、同じfb_idを持つ正確な2つの行があります。以前と同じようにクエリを実行すると、次のようになります。

User.first(:include => :cookies, :conditions => {:cookies => {:opened => false} , :fb_id => fb_id})

ID2の新しいユーザーが返されます。

どうしたの?私はそれを3〜4時間デバッグしようとしていますが、理解できません。ありがとう

私のモデル:

class User < ActiveRecord::Base
    has_many :cookies
    has_many :fortunes, :through => :cookies
end

class Cookie < ActiveRecord::Base
    belongs_to :user
    belongs_to :fortune
end

class Fortune < ActiveRecord::Base
    has_many :cookies
    has_many :users, :through => :cookies
end
4

2 に答える 2

0

これを試して:

  User.first(:include => :cookies, :conditions => ["cookies.opened=? or users.fb_id=?",false, fb_id])
于 2012-11-27T03:51:06.110 に答える
0

Railsはを使用するleft outer joinときにを使用すると思いますinclude。ただし、関連する行を結合すると、すべての値はになりますnull。したがって、次のようなものを使用する必要があります。

User.first(:include => :cookies, 
           :conditions => ["cookies.opened <> ? AND fb_id = ?", true, fb_id])
于 2012-11-27T03:58:08.050 に答える