这让我疯狂!这段代码过去工作正常,但几个星期前它停止工作,我无法解决原因。基本上一场比赛有很多补丁。在我PatchesController出现的错误,但其在轨控制台这样的重复性:ActiveRecord为简单的has_many关联提供'没有这样的列'SQL错误
first_game = Game.find(:first)
first_game.patches
只要我使用补丁的方法,我得到这样的:
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: patches.game_true: SELECT * FROM "patches" WHERE ("patches".game_true = 1)
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:221:in `rescue in log'
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:204:in `log'
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb:172:in `block in execute'
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb:417:in `catch_schema_changes'
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb:172:in `execute'
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb:320:in `select'
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all'
from /project_root/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:62:in `select_all_with_query_cache'
from /project_root/vendor/rails/activerecord/lib/active_record/base.rb:664:in `find_by_sql'
from /project_root/vendor/rails/activerecord/lib/active_record/base.rb:1578:in `find_every'
from /project_root/vendor/rails/activerecord/lib/active_record/base.rb:618:in `find'
from /project_root/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:60:in `find'
from /project_root/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:400:in `find_target'
from /project_root/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:354:in `load_target'
from /project_root/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:140:in `inspect'
from /usr/local/bin/irb:12:in `<main>'
现在,SQL应该说真的'WHERE patches.game_id = 1',除非我生气。我不知道为什么它会生成该SQL!
这里的模型/ game.rb:
class Game < ActiveRecord::Base
has_many :patches
end
这里的模型/ patches.rb:
class Patch < ActiveRecord::Base
belongs_to :game
end
而且补丁表中有 'game_id' 在餐桌上,和3项,全部为第一场比赛。如果我得到其中一个修补程序并转到my_patch.game,它会返回它所属的Game对象,而不会出现任何问题。任何帮助将不胜感激!
如果您手动设置关联关键字,它是否工作?了解你不应该设置它,我只是好奇,如果我们可以找出错误的地方。 – jasonpgignac 2010-07-19 13:50:35
Patch.find(:all,:conditions => {:game_id => 1})工作正常! first_game.patches.find(:all,:conditions => {:game_id => 1})给出相同的错误,并生成此SQL: SELECT * FROM“patches”WHERE(“patches”.game_true = 1 AND(“patches”,“game_id”= 1)) – TheAdmiral 2010-07-19 14:46:58