0

私の Rails コントローラー コードでは、各コンテンツの 3 つをランダムに取得したいと考えています。

@content = Content.includes(:author).find(params[:id])    
content_sub_categories = @content.subcategories

related_content = []
content_sub_categories.each do |sub_cat|
  related_content << sub_cat.contents
end

@related_content = related_content.rand.limit(3)

rand.limit(3)が機能しておらず、エラーには次のものがあります。

undefined method `limit' for #<Array:0x007f9e19806bf0>

私は Rails に精通していますが、まだ Ruby を学習中です。どんな助けでも信じられないほど高く評価されます。

おそらく、私もこの方法でコンテンツをレンダリングしている可能性があります<%= @related_content %>か?

私は使用しています:

  • レール 3.2.14
  • ルビー1.9.3
4

5 に答える 5

7

limitLIMIT X生成された SQL に( を追加する) ActiveRecord リレーションのメソッドです。ただし、リレーションではなく配列があるため、エラーが発生します。

同等の配列メソッドはtake. sampleもちろん、メソッドを使用して、シャッフルと制限の両方を 1 つのステップに組み合わせることができます。

于 2013-09-20T14:45:48.547 に答える
5

3 つのランダムな要素を選択する場合は、Array#sampleを使用します。

related_content.sample(3)
于 2013-09-20T14:43:10.523 に答える
0

これはどのように ?

a = (1..10).to_a
p a.sample(3)
# >> [4, 10, 7]
于 2013-09-20T14:43:48.410 に答える