Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

モデルのスコープ機能とは、共通的に使うクエリをモデルのメソッドのように定義できる機能です。 こうすることにより、複雑なSQLを何度も書かなくてよくなり、可読性と保守性を向上させることができます。 動作確認 Rails 4.1 目次 スコープ(Scope)の概要 スコープに引数を指定 スコープのマージ デフォルトスコープの設定 1. スコープ(Scope)の概要以下の2つの方法で「共通的に使うクエリをスコープ」として定義できます。 # 定義方法1: scopeメソッドで定義 class Post < ActiveRecord::Base scope :published, -> { where(published: true) } end # 定義方法2: クラスメソッドのように定義 class Post < ActiveRecord::Base def self.published whe
rails3。 default_scope order('id') としたときに、ソート対象を変更する方法。ただorderを追加するだけだと後ろにくっついてしまうのでうまくありません。 Model.order('id DESC') #=> "ORDER BY id, id DESC" 正解。 Model.reorder('id DESC') このreorderがなかなか見つかりませんでした。unscopedを使えってのはいっぱい見つかるのですが、確かに Model.unscoped.order('id DESC') はうまくいきます。しかし、他のscopeは使いたい、と思ってこんなことしても # scope public_item where("ispublic = true") Model.unscoped.public_item.order('id DESC') # => "ORDER
モデルからデータを取得する際に常に特定の検索条件を指定することができるdefault_scopeですが、 デメリットについてあまり注意を払わずに使ってしまって失敗しました。 サンプル事例 環境 * Rails 3.2.12, 4.0 * MySQL 5.1.65 ※ 実際に問題が起きたバージョンが3.2.12 なのでそちらが中心になっています。 データを「名前」「年齢」どちらか指定された値で並び替えるという処理があったので、 特に指定が無ければid順で取得するという条件をdefault_scope を使って追加しました。 class User < ActiveRecord::Base default_scope -> { order(:id) } end これで、モデルからデータを取得する際に必ずORDERが指定されるようになります。 User.all #=> SELECT "users"
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く