我使用 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。
Heroku Logs 向我显示以下消息:
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">}