2013-04-02 40 views
0

find_each似乎並沒有和使用finder_sql的ActiveRecord關係相處得很好。有沒有人處理過這個?例如:find_each和finder_sql不能很好地玩對方?

class User < ActiveRecord::Base 
    has_many :games, :dependent => :destroy, 
      :finder_sql => 
       proc {"SELECT * FROM games WHERE player_0_id = #{id} OR player_1_id = #{id}"} 
end 

class Game < ActiveRecord::Base 
    belongs_to :player_0, :class_name => "User", :foreign_key => "player_0_id", :inverse_of => :games 
    belongs_to :player_1, :class_name => "User", :foreign_key => "player_1_id", :inverse_of => :games 
end 

調用@ user.games.each可以正常工作並遍歷我們關心的所有遊戲。但是,在調用@ user.games.find_each結果:

ActiveRecord::StatementInvalid: 
    SQLite3::SQLException: no such column: games.user_id: SELECT "games".* FROM "games" WHERE "games"."user_id" = 2 AND ("games"."id" >= 0) ORDER BY "games"."id" ASC LIMIT 1000 

回答

0

看一看http://compositekeys.rubyforge.org/解決給定的問題。

+0

hrmm,看起來很有趣。唯一的問題是其中一名玩家可以爲空(如果我們正在尋找某人進行快速匹配)。此外,您可以在我們的數據庫中使用同一對多個遊戲(您可以重玩之前與某人玩過的遊戲)。 – insomniac2846

+0

如果我是你,我會改變數據模型。通過使用has_many可以輕鬆解決這個問題。看看http://xyzpub.com/en/ruby-on-rails/3.2/ar-many_to_many.html – wintermeyer

+0

hrrm,我沒有第三個模型用於通過has_many部分 – insomniac2846

相關問題