我有一个像这样的命名范围......
named_scope :gender, lambda { |gender| { :joins => {:survey_session => :profile }, :conditions => { :survey_sessions => { :profiles => { :gender => gender } } } } }
当我调用它时,一切正常。
我也有我称之为的这种平均方法......
Answer.average(:rating, :include => {:survey_session => :profile}, :group => "profiles.career")
如果我这样称呼它也可以。
但是,如果我这样称呼它...
Answer.gender('m').average(:rating, :include => {:survey_session => :profile}, :group => "profiles.career")
我得到...
ActiveRecord::StatementInvalid:PGError:错误:表名“profiles”指定了不止一次:SELECT avg("answers".rating) AS avg_rating,profiles.career AS profiles_career FROM "answers" LEFT OUTER JOIN "survey_sessions"survey_sessions_answers ON "survey_sessions_answers ".id = "answers".survey_session_id 左外连接 "profiles" ON "profiles".id = "survey_sessions_answers".profile_id INNER JOIN "survey_sessions" ON "survey_sessions".id = "answers".survey_session_id INNER JOIN "profiles" ON "profiles".id = "survey_sessions".profile_id WHERE ("profiles"."gender" = E'm') GROUP BY profiles.career
这有点难以阅读,但说我包含了两次表格配置文件。
如果我只是从平均值中删除包含它可以工作,但它并不实用,因为平均值实际上是在一个通过范围的方法内部调用的。因此,有时性别或平均值可能会被相互调用,如果其中任何一个丢失了配置文件,那么它就不起作用了。
所以要么我需要知道如何在 Rails 中修复这个明显的错误,要么想办法知道哪些范围应用于 ActiveRecord::NamedScope::Scope 对象,以便我可以检查它们是否已被应用,如果没有添加包括平均值。