Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up
![[Rails 3.2.9] ActiveRecordでIN句 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/e8d6d368364defe7266844bbf135056b6d5a2dfe/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JTVCUmFpbHMlMjAzLjIuOSU1RCUyMEFjdGl2ZVJlY29yZCVFMyU4MSVBN0lOJUU1JThGJUE1JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1iOWI1MjMzMzIyYzk5MGRjNTIwYzk2Y2Q4MmZkYmY5Zg%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBOYXJpa2F6dTMmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTczNjg2NmFkNThmYmYzM2Y4ZGU2ODNkNzIzZTMyNmQz%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D4a10759b54e3e856e0712e656ce51219)
# frozen_string_literal: true module Naming extend ActiveSupport::Concern DEFAULT_NAME = "Default Name" # scope, callback, relation はここに定義 included do before_create :assign_default_name, unless: :name? scope :with_name, -> (names) { where(name: names) } end # class メソッド class_methods do # cattr_reader 使ってもいいですが例なのであえて冗長に書いてます def default_name DEFAULT_NAME end end def assign_default_name self.name
find(id) に find_by_id(id) の挙動を期待していたので以下のようなコードを書いてしまっていた。 @item = Item.find(params[:id]) if params[:id] render(:nothing => true, :status => '404 Not Found') unless @item これだとレコードが見つからなかったときにサーバーエラー(ステータスコード 500)になってしまう。 そうならないためには以下のコードが正しい。 @item = Item.find_by_id(params[:id]) if params[:id] render(:nothing => true, :status => '404 Not Found') unless @item 奥が深い。 参考 ActiveRecord のお勉強 – Rails で行こう
背景 Rails 4.1 より ActiveRecord::Enum が利用可能となりました。 これにより以下の様な記述が可能となります。 class User < ActiveRecord::Base enum role: [:general, :admin] ... end # role が admin なユーザを取得する user = User.admin.first! # admin かどうか user.admin? # role を確認 user.role # => "general" # role を admin に変更 user.admin! # role の取りうる値を確認 User.roles # => {"general"=>0, "admin"=>1}
TL;DR ActiveRecord::Enumで、安易に値を追加・削除するのは危険。将来の変更に備えて、DBに登録される値をHashで指定しましょう。 class User < ActiveRecord::Base # This is BAD enum authority: [:registrant, :admin] # This is OK enum authority: { registrant: 10, admin: 20 } end 本編 年度も変わりさて心機一転、という季節なのに私の地元は昨日大雪でしたが、皆様いかがお過ごしでしょうか。さて今日は表題の通り、Rails 4.1における目玉のひとつ、ActiveRecord Enumsについてです。 ActiveRecord Enumsとは 例えばUserモデルにauthority(権限)という属性を持たせたい時によくやるのは、D
ActiveRecord4でこんなSQLクエリどう書くの? Merge編 #activerecord#rails#ruby 2013年 10月 24日 nishio 「このデータ取得するのにSQLではこういう風に書けばいいんだけど、ActiveRecordでは一体どう書けばいいの?」 毎回この課題に悩まされています。 特に業務アプリの場合、とてつもなく複雑なSQLを投げる場合があります。 ものすごい数のテーブルをjoinして、existsで条件みて、union allして。。。 なんていう処理がでてくると、さすがにActiveRecordやDatamapperを使ってクエリを組み立てるのをあきらめて、直接SQLを書いてしまうことがあります。 でも、できればActiveRecordを使ってスマートにSQLを組み立てたいものです。 scopeで書いておけば、処理も使い回せますしね。 ということ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く