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
# 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ページを開く