teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

レコード取得方法の訂正

2015/09/11 05:26

投稿

deathsan
deathsan

スコア126

answer CHANGED
@@ -3,12 +3,30 @@
3
3
  **生SQLはだめです。**
4
4
  なんでRails使ってるんですか
5
5
 
6
+ 少し長めのコードなんですが、極力ActiveRecordオブジェクトを作成せず最後の方で纏めて返しています。
6
- クラスメソッドを作ってますがスコー定義してください。
7
+ 仕事の合間に5分くらいで作っコードなので、もっといいロジックが出たらそちら使ってください。
8
+ ちなみに再現もしてないので動作保障できません。
9
+
10
+ 怪しいところ
11
+ ①sort_by!のところにもしかするとblank判定が要るかもしれないです。
12
+ ②storeのところのハッシュ追加がうまくいかないかもしれません。(うろ覚えなので)
13
+
7
14
  model/post.rb
8
15
  ```ruby
9
- # お気に入りの数が多いレコード順にソートする。
10
16
  def self.sort_by_favorites
17
+ result = []
11
- #期待した値が取れないので暇があれば修正します
18
+ search_condition = {}
19
+ post_ids = Favorite.pluck(:post_id)
20
+
21
+ if post_ids.present?
22
+ post_ids.each { |post_id| search_hash.store(post_id, Favorite.where(post_id: post_id).count) }
23
+ search_condition.sort_by! { |key,val| -val }
24
+ end
25
+
26
+ if search_condition.present?
27
+ search_condition.each { |key, val| result << self.find(key) }
28
+ end
29
+ return result
12
30
  end
13
31
  ```
14
32
 

1

訂正

2015/09/11 05:26

投稿

deathsan
deathsan

スコア126

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  ```ruby
9
9
  # お気に入りの数が多いレコード順にソートする。
10
10
  def self.sort_by_favorites
11
- return self.joins(:favorites).order(post_id: :desc)
11
+ #期待した値が取れないので暇があれば修正します
12
12
  end
13
13
  ```
14
14