我在本地创建了这个方法,使用arel创建我自己的搜索。
def self.search(search)
User.joins(:experience).where(Experience.arel_table[:description].matches("%#{search}%")
.or(Experience.arel_table[:description].matches("%#{search.capitalize}%"))
.or(Experience.arel_table[:job_title].matches("%#{search}%"))
.or(Experience.arel_table[:job_title].matches("%#{search.capitalize}%")))
.group(:user_id)
end一切都很顺利,直到推到赫鲁库。
Heroku日志显示了以下消息:
ActionView::Template::Error (PGError: ERROR: column "users.id" must appear in the GROUP BY clause or be used in an aggregate function这是选择:
SELECT "users".* FROM "users" INNER JOIN "experiences" ON "experiences"."user_id" = "users"."id" WHERE (((("experiences"."description" ILIKE '%rails%' OR "experiences"."description" ILIKE '%Rails%') OR "experiences"."job_title" ILIKE '%rails%') OR "experiences"."job_title" ILIKE '%Rails%')) GROUP BY user_id ORDER BY created_at DESC LIMIT 7 OFFSET 0):如您所见,我的方法中有.group(:user_id),所以我不理解这个错误
提前谢谢你的帮助。
更新
在我像这样改变方法之后:
User.joins(:experience).where(Experience.arel_table[:description].matches("%#{search}%")
.or(Experience.arel_table[:description].matches("%#{search.capitalize}%"))
.or(Experience.arel_table[:job_title].matches("%#{search}%"))
.or(Experience.arel_table[:job_title].matches("%#{search.capitalize}%")))
.select("experiences.user_id, users.email")
.group("experiences.user_id, users.email")在我看来,这个错误
undefined method `name' for nil:NilClass 在这一行
<%= user.information.name %>如果我删除这一行,我就会得到这个错误。
Routing Error
No route matches {:action=>"show", :controller=>"users", :id=>#<User email: "jgiron@hotmail.com">}发布于 2012-12-17 23:16:48
你需要做一个select。
User.joins(:experience).where(Experience.arel_table[:description].matches("%#{search}%")
.or(Experience.arel_table[:description].matches("%#{search.capitalize}%"))
.or(Experience.arel_table[:job_title].matches("%#{search}%"))
.or(Experience.arel_table[:job_title].matches("%#{search.capitalize}%")))
.select("experiences.user_id, users.email")
.group("experiences.user_id, users.email")如果不指定要选择哪些列,Rails将在默认情况下尝试选择所有列。
更新
在执行SQL查询时,SELECT中显示的所有字段都必须显示在GROUP BY中。因此,如果您有SELECT foo, bar, baz, MAX(id) FROM foo_bars GROUP BY foo, bar, baz,那么foo、bar和baz必须在GROUP BY中。因为MAX(id)是一个聚合函数,所以它不必出现在GROUP BY中。
但是,如果您不尝试执行这种GROUP BY,那么Rails就有一个名为group_by的应用程序端方法。你就这样用它:
@experiences.group_by {|x| x.user_id} 它将返回一个以键作为用户id,值作为体验的散列。
https://stackoverflow.com/questions/13923843
复制相似问题