0

典型的なブログアプリで次のようなことをすると:

p = Post.order('created_at DESC').limit(10)
p.from(5)

それは発生します:

ActiveRecord::StatementInvalid: SQLite3::SQLException: near "5": syntax error: SELECT  "posts".* FROM 5  ORDER BY created_at DESC LIMIT 10

最初の 5 つの投稿を配列で取得し、次の 5 つの投稿を別の配列で取得しようとしています。配列で .from() を使用すると、正常に機能し、選択した番号から始まる必要な要素を取得します。しかし、ビューまたはコントローラーで .from() を使用すると、オブジェクト/配列に .from() を適用する代わりに、新しいクエリを生成しようとします。

私のコントローラーはやっていた:

@last_ten_posts = Post.order('created_at DESC').limit(10)

そしてビュー:

@last_ten_posts.first(5).each do |post|
@last_ten_posts.from(5).each do |post|

.from() メソッドはどのように使用すればよいですか?

ありがとう

編集: @Rubyist は、投稿を処理する最初の方法を思い出してください。.from() が機能しない理由を見つけることに興味がありますか?

4

2 に答える 2

2

from メソッドは、レコードがフェッチされるテーブルを指定するために使用されていたため機能しません。そのため、元のクエリでは、テーブル 5 からの投稿を探していますが、テーブル 5 がないため意味がありません。 、posts not 5というテーブルがあります。

from メソッドの詳細 - http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-from

オフセットのような別の方法を使用することをお勧めします - http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-offset

first_five = Post.order('created_at DESC').limit(5)
last_five = Post.offset(5).order('created_at DESC').limit(5)
于 2013-10-28T18:54:18.967 に答える
1
@last_ten_posts = Post.order('created_at DESC').limit(10)
first_five = @last_ten_posts.first(5)
last_five = @last_ten_posts.last(5)
于 2013-10-28T16:16:07.480 に答える