我有4个具有以下关系的模型
class Extmodul
belongs_to :fakultaet
belongs_to :studierender
belongs_to :semester
这三个模型与Extmodul有很多关系
has_many :extmoduls
现在我跑这个
Extmodul.includes(:studierender, :semester, :fakultaet).where(semester_id: 4).where("fakultaets.name like ?", "%ad%")
我收到此错误
2.2.3 :046 > Extmodul.includes(:studierender, :semester, :fakultaet).where(semester_id: 4).where("fakultaets.name like ?", "%ad%")
Extmodul Load (1.3ms) SELECT "extmoduls".* FROM "extmoduls" WHERE "extmoduls"."semester_id" = ? AND (fakultaets.name like '%ad%') [["semester_id", 4]]
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: fakultaets.name: SELECT "extmoduls".* FROM "extmoduls" WHERE "extmoduls"."semester_id" = ? AND (fakultaets.name like '%ad%')
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/sqlite3-1.3.11/lib/sqlite3/database.rb:91:in `initialize'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/sqlite3-1.3.11/lib/sqlite3/database.rb:91:in `new'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/sqlite3-1.3.11/lib/sqlite3/database.rb:91:in `prepare'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/sqlite3_adapter.rb:306:in `block in exec_query'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `log'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/sqlite3_adapter.rb:293:in `exec_query'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:355:in `select'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:32:in `select_all'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/query_cache.rb:70:in `select_all'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/querying.rb:39:in `find_by_sql'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/relation.rb:639:in `exec_queries'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/relation.rb:515:in `load'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/relation.rb:243:in `to_a'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/relation.rb:630:in `inspect'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/railties-4.2.5.1/lib/rails/commands/console.rb:110:in `start'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/railties-4.2.5.1/lib/rails/commands/console.rb:9:in `start'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:68:in `console'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /home/bcc/.rvm/gems/ruby-2.2.3/gems/railties-4.2.5.1/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'2.2.3 :047 >
但是当我用一个额外的参数运行相同的查询时,它可以完美地运行
Extmodul.includes(:studierender, :semester, :fakultaet).where(studierenders:{archiv: false}, semester_id: 4).where("fakultaets.name like ?", "%ad%")
为什么之前的查询显示错误?如何使它工作?
答案 0 :(得分:1)
如果您想为所包含的模型添加条件,则必须这样做 明确地引用它们。
以下应该有效
Extmodul.includes(:studierender, :semester, :fakultaet).where(semester_id: 4).where("fakultaets.name like ?", "%ad%").references(:fakultaets)