在我的應用程序有模式Visits
& Post
&Ruby on Rails的 - 組帖子與和價格
class Visit < ActiveRecord::Base
belongs_to :post, :counter_cache => true
class Post < ActiveRecord::Base
has_many :visits
當訪問者訪問後,我就與post_id
和price
(添加到我的visits
表price
是decimal
)。
在我的儀表板中,我想顯示他們瀏覽過哪些帖子(已分組)以及他們賺了多少錢。
例如: 1)支柱1,觀察54次,並獲得$ 1.6,2)柱2,觀察39倍,並獲得$ 1.1,等等
我與嘗試:
- a = Visit.group(:post_id).where(user: current_user).sum(:price)
- a.each do |n|
%p
= n
這給我,每個post_id
,但price
只是*的BigDecimal:7fb2625f9238,「0.15E1 * &我不能做n.post.title
& n.post.title
找到文章標題給我的錯誤:undefined method 'post'
這是結果,我得到:
[44, #<BigDecimal:7fb2625f9238,'0.15E1',18(36)>]
[45, #<BigDecimal:7fb2625f8dd8,'0.13E1',18(36)>]
[46, #<BigDecimal:7fb2625f8928,'0.3E-1',9(36)>]
我也曾嘗試用:
- Visit.select([:post_id, :price]).where(user: current_user).each do |e|
%p
= e.post.title
= e.cpc_bid
此選項可單獨給我所有帖子和價格,而不是合併。
結果是這樣的:
Post title 1, 0.15
Post title 1, 0.01
Post title 2, 0.1
Post title 1, 0.15
Post title 2, 0.1
Post title 2, 0.1
Post title 2, 0.1
Post title 1, 0.15
我也試過:
- Visit.select([:post_id, :price]).group(:post_id).where(user: current_user).each do |e|
%p
= e.post.title
= e.price
此選項讓我只能在後,其價格的訪問之一。
結果是:
Post title 2, 0.1
Post title 1, 0.15
我最後的嘗試是:
- Visit.joins(:post).group(:post_id).select('sum(price) as earnings', :post_id, :title, 'count(visits.id) as total_views').where(user: current_user).each do |e|
%p
= e.title
= e.price
這給了我這個錯誤:
PG::GroupingError: ERROR: column "posts.title" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...ECT sum(price) as earnings, "visits"."post_id", "title", c...
我怎樣才能結合起來他們的總和所有帖子均有price
及其帖子標題。
感謝@MikDiet答案。它在我的'Development ENV'中工作,在那裏我有'sqlite3'作爲我的數據庫。在'生產ENV'中,我使用'PostgreSql',並且出現這個錯誤:'PG :: GroupingError:ERROR:column「visits.id」必須出現在GROUP BY子句中或用於聚合函數中'&不應該'sum(visits.id)'是'count(visits.id)',因爲'sum'會將所有的ID加在一起並且不計數? – Rubioli
這會給我所有的帖子,我只想顯示用戶訪問過的帖子,這就是爲什麼我有'where(user:current_user)''。我可以在哪裏添加這個?先謝謝了! – Rubioli
是的,我犯了一個錯誤,應該有'count(visits.id)' – MikDiet