簡體   English   中英

find_by_sql呈現一個數組

[英]find_by_sql renders an array

我在這里遇到了一些問題,我無法使我的find_by_sql請求呈現ActiveRecord關系。 實際上,我需要一個activerecord關系來提出新的請求:

@searches = @searches.find_by_sql('SELECT *, COUNT( follower_id ) FROM follows GROUP BY followable_id LIMIT 0 , 3') if params[:only_famous_projects]
@project_pages = @project_pages.where(:project_id => @searches.pluck(:'followable.id')) if params[:only_famous_projects]

沒有activerecord關系我不能使用“pluck”。 因此,我認為我必須將我的sql請求轉換為Activerecord請求。 但是,只要我在ActiveRecord上使用“count”,我就會遇到一個很大的問題:我最終沒有ActiveRecord關系,而是一個FixNum!

我不知道在哪里找到答案,如果你能幫助我,我將非常感激。 謝謝

只有在使用YourModel.find_by_sql調用它時, find_by_sql才會返回ActiveRecord對象。

為什么不使用ActiveRecord查詢接口。 它在計算方面做得很好。

更新

@searches = @searches.group(:followable_id).limit(3).offset(0).count(:follower_id) if params[:only_famous_projects]

請注意,它將為您提供包含每個followable_id的計數的哈希。

是不是LIMIT 0, 3相當於LIMIT 3

COUNT將始終返回FixNUM,因為您要求數據庫計算行數。

您應該嘗試使用find_by_sql作為最后的手段,因為它只是為了繞過它無法做的事情而繞過ActiveRecord。 即使對於ActiveRecord不支持的東西,您也可以隨時查看是否可以使用SqueelValium寶石來處理邊緣情況。

不使用find_by_sql另一個原因是,例如,使用MySQL特定術語將阻止您將來使用其他數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM