誰かがこのメソッドが何をしているのか、私はそれに渡すことができるのか説明できますか?範囲とスコープ範囲
scoped(options = nil)
Returns an anonymous scope.
また、スコープ方式はどのように機能しますか?私はドキュメントを読んだ後に理解しません。
誰かがこのメソッドが何をしているのか、私はそれに渡すことができるのか説明できますか?範囲とスコープ範囲
scoped(options = nil)
Returns an anonymous scope.
また、スコープ方式はどのように機能しますか?私はドキュメントを読んだ後に理解しません。
、すべてのクエリの構築方法(などのようなwhere
、order
、joins
、limit
とは)いわゆる範囲を返します。 all
またはfirst
のようなキッカーメソッドを呼び出した場合にのみ、ビルドアップクエリが実行され、データベースの結果が返されます。
scoped
クラスメソッドもスコープを返します。返されるスコープはデフォルトでは空です。つまり、結果セットが制限されず、クエリが実行された場合にすべてのレコードが返されることを意味します。 MurifoXのquery_by_dateの例のように、空の代替手段を提供するために使用できます。 それとも、たとえば同じように、1つのメソッド呼び出しに複数の条件を組み合わせて、それを使用することができます:
Model.scoped(:conditions => 'id < 100', :limit => 10, :order => 'title ASC')
# which would be equivalent to
Model.where('id < 100').limit(10).order('title ASC')
scope
クラスのメソッドを使用すると、また、例えばのように、スコープを返すクラスメソッドを定義することができますこのように使用することができます
class Model
scope :colored, lambda {|col|
where(:color => col)
}
end
:あなたが望むよう
Model.colored
スコープとの良いところは、(ほぼ)あなたがそれらを組み合わせることができますということです、その次は絶対に可能です:
Model.red.where('id < 100').order('title ASC').scoped(:limit => 10)
私も強くhttp://guides.rubyonrails.org/active_record_querying.html
私はあなたがこのようなActiveRecord
クエリインターフェイスへの連鎖の呼び出しを行うpast.Whenでそれを使用している:
Model.where(:conditions).where(:more_conditions).where(:final_conditions)
それらの一つ一つは、すでに何の問題もなくチェーンを機能させる、スコープされています。しかし、次のようなものがあるとしましょう:
Model.query_by_date(date).query_by_user(user).query_by_status(status)
scope :query_by_date, lambda { |date|
case date
when "today"
where(:date => Date.today)
when "tomorrow"
where(:date => Date.tomorrow)
else
# Any value like '' or 0 or Date.whatever
end
}
日付パラメタが今日または明日でないと、エラーが発生します。最後の値を選択し、このクエリを次の1つのquery_by_user
と連鎖させて、undefined method default_scoped? for ''
という結果になります。しかしscoped
メソッドをelse
の状態にすると、このメソッド/名前付きスコープを渡してwhere/find/other activerecord methods
を呼び出していないが、スコープ付きオブジェクトが返されたことをactiverecordに伝えているので、クエリや物事を連鎖させ続けることができます。
これは最終的にこのようになります。
else
scoped
end
この簡単な例を理解していただきたいと思います。 ActiveRecordので
ありがとうございました。 .scopedに渡すことができるものを私はどのように知っていますか?私は見る:条件=>等 – LuckyLuke
あなたはすべてのオプションの完全なリストをここに見つけるでしょう:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find-label-Options – severin
恐ろしい!あなたの助けをありがとう – LuckyLuke