私は自分の検索を作成するために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">}