0
我在本地使用arel創建了我自己的搜索。Postgresql Arel和Group By
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的日誌告訴我下面的消息:
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):
正如你所看到的,我有。集團(:USER_ID)在我的方法,所以我不承認這個錯誤
在此先感謝您的幫助。
UPDATE
我改變這樣的方法之後:
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")
我在這一行
<%= user.information.name %>
如果我得到這個錯誤在我看來
undefined method `name' for nil:NilClass
抹掉這一行I g et此錯誤
Routing Error
No route matches {:action=>"show", :controller=>"users", :id=>#<User email: "jgiro[email protected]">}
它不起作用,現在它說失蹤的屬性:電子郵件 – Jean
什麼是行不通的?您需要選擇所需的所有字段,就像普通的SQL查詢一樣。 '.select(「user_id,email」).group(:user_id,:email)' –
這是錯誤SQLite3 :: SQLException:不明確的列名:created_at:SELECT user_id,email FROM「users」INNER JOIN「experience」ON 「體驗」。「user_id」=「users」。「id」WHERE((((「experience」。「description」LIKE'%perra%'or「experience」。description「LIKE'%Perra%')or」體驗「。」job_title「LIKE'%perra%')或」體驗「。「job_title」LIKE'%Perra%'))GROUP BY user_id,email ORDER BY created_at DESC LIMIT 7 OFFSET 0 – Jean