【发布时间】:2012-12-17 23:14:26
【问题描述】:
我在本地使用 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 日志向我显示以下消息:
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">}
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 heroku ruby-on-rails-3.2