やりたいこと 2014-9-31 などを弾きたい。 結論から ActiveModel::EachValidator を使った Custom Validator を追加します。 gem を使わない理由 gem を使わなくても良いくらいの規模。 rails のバージョンアップに伴う、gem バージョンアップの負債が増えるのがいやだった。 例えば rails v4.1.5 で validates_timeliness を使うと、以下のような deprecated なエラーが出るようになった。 class MyValidator < ActiveModel::Validator def initialize(options={}) super options[:class].send :attr_accessor, :custom_attribute end end . (called from
Different Ways to Set Attributes in ActiveRecord (Rails 4) Last revisited on 17 Apr 2014 , originally published on 29 Jan 2014 . Ruby On Rails Rails 4 allows the developer to change ActiveRecord attributes in various ways. Each one does it slightly differently with sometimes unique side-effects. It’s important you understand which method to use, so here’s a cheat sheet with in-depth information be
全文検索エンジンを使わずともActiveRecordに手軽に全文検索機能をつけるGemがありました。AttrSearchableというGemです。 さすがに一般的な全文検索エンジンと同じようにPDFやExcelファイルの中身まで検索することはできませんが、RDBに保存してあるテキストを検索するぐらいの用途には良いかもしれません。MySQLやPostgreSQLで対応している、全文検索用のインデックスにも対応しているので、通常のLIKE検索よりは良さそうです。 使い方 gem 'attr_searchable'をGemfileに追加してbundle install`したあと、下のコードのように、ActiveRecordのモデルにattr_seachableというクラスマクロを追加します。 class Book < ActiveRecord::Base include AttrSearchab
こんにちは。今回はRailsについてです。 ActiveRecordを継承しないモデルオブジェクト Railsを開発するうえで必須になってくるModelオブジェクト。 今回はActiveRecord::Baseを継承せずに、モデルと同じような動きをするRubyオブジェクトを作成して、検索機能を実装します。 作成したRubyオブジェクトにモデルと同じような動きを持たせるメリットとして、 バリデーション機能が使える モデルオブジェクトとして振る舞うので、form_forの引数に渡せる バリデーション時のエラーメッセージを簡単に他言語対応できる 上記の機能を持たせることによって、大きくその恩恵をうけることが出来るのが、フォームなどを使用する、検索機能などです。 今回は、productsリソースに基づいて、検索機能を実装します。 productsテーブルのカラムは1つで、"name"属性、タイプは
Virtual Attributesとは、モデルのDBに存在しない仮想的な属性のことです。 モデルにVirtual Attributesを追加することで、DBを変更しないでフォームを変更することができるようになります。 言葉ではいまいち分かりづらいので、次のような、「名前」の入力フィールドと「グループ」のセレクトボックスがある画面を、 Virtual Attributesを使って、DBのカラムを変更しないで、「名前」が「苗字」と「氏名」に分かれ、グループを追加する入力フィールドを追加できます。 Virtual Attributesの使いどころとして、DBをマイグレートするのが大変、その他なんらかの理由によりDBをいじれない場合に、モデルにVirtual Attributesを追加することでフォームの内容を変更することが可能です。 もちろん、バリデーションも行えます。 動作確認 Rails
タイトルの通りですが、作りました。 sinsoku/pretty_validation これは何? DBのスキーマからvalidationを自動生成します。 validates_presence_of (NOT NULL制約から生成) validates_numericality_of (columnの型から生成) validates_uniqueness_of (UNIQUE制約から生成) の3つに対応します。 使い方 いつものようにGemfileに追加し、 bundle install してください。 gem 'pretty_validation' バリデーションファイルを生成する方法は2つあります。 rake db:migrate の後に自動で生成される rake validation:generate を手動で実行する バリデーションのファイル例 例えば、こんなマイグレーションファ
Railsのモデルのバリデーションエラーの扱い方について説明します。 errors(エラーメッセージオブジェクト)、独自のエラーメッセージの追加、エラーメッセージの表示、日本語化について説明します。 動作確認 Rails 4.1 目次 モデル(model)のエラーメッセージ errors の使い方 モデル(model)にエラーメッセージを追加 ビューにモデルのバリデーションエラーを表示 モデルのバリデーションエラーメッセージを日本語化 モデル(model)のエラーメッセージ errors の使い方Railsのモデル(model)でバリデーションエラーが発生した場合に、model の errorsにエラーメッセージが設定されます。さらに、full_messagesでバリデーションのエラーメッセージの配列を取得できます。 次のProductモデルが設定されている前提で話を進めます。 # app
更新履歴 2011/9/28 rails3.1対応 2011/6/27 ActiveModelImplの継承の継承したクラス対応。 2011/6/23 リリース 概要 ActiveModelを使うとDBに保持しないモデルが作れます(ある程度ActiveRecord互換の機能が動く) ただしそのままでは簡単に使えなそげ。機能を作るのに必要な部品を提供するものっぽい なので機能をある程度組み込んだベースクラスがあると便利ではないかと作りました 組み込んだ機能 attributes, attributes=での設定と取得 dirty(どの属性が変更されたか等を取得) 下記は通常のActiveModelでも簡単に実装できるもの validation form_for等に渡せるように対応するため互換メソッド ActiveModelを使うシチュエーション DB使わないところ 検索フォームのモデルに バ
ActiveModel::Serializersとは Railsなどで簡単で素早くjsonを作れるgemです。 ActiveModel::Serializersより、 ActiveModel::Serializers brings convention over configuration to your JSON generation. 実際に試してはないですが、ActiveModelに依存しているだけなのでSinatraなどでも使えるはずです。 なぜActiveModel::Serializersを使うのか 簡単で速いので使ってます。 簡単 Railsではjbuilderを使うことが多いですが、記法が直感的じゃなくて多少憶えにくいかな思ってます。 json.(@message, :content, :author) => {content: 'hello', author: 'kakk
こんにちは! Rails芸人(仮)の@srockstyleです! concern内にあるmoduleに切り出したメソッドでScopeつかいたーい、なんて時に使う方法です。 module TestModule extend ActiveSupport::Concern def self.included(base) base.class_eval do scope :testerexe, -> do where(deleted_at: nil) end scope :testabexe, -> do where(created_at: nil) end scope :testcdexe, -> do where(updated_at: nil) end end end ## ここでScope読み込めちゃう def self.test User.testcdexe end end
更新情報: 2013/11/19: 初版公開 2021/01/08: 訳文見直し、追記 こんにちは、hachi8833です。今回は、自分が知りたかった、Active Recordモデルのリファクタリングに関する記事を翻訳いたしました。1年前の記事なのでRails 3が前提ですが、Rails 4以降でも基本的には変わらないと思います。リンクは可能なものについては日本語のものに置き換えています。 なお、ここでご紹介したオブジェクトは、app以下にそれぞれ以下のようにフォルダを追加してそこに配置します。 注記: 以下は使われそうなフォルダを列挙しただけであり、実際にはこの一部しか使いません。 Value Object Service Object Form Object Query Object View Object Policy Object Decorator ⚓ 肥大化したActive
Active Record Active Record objects don’t specify their attributes directly, but rather infer them from the table definition with which they’re linked. Adding, removing, and changing attributes and their type is done directly in the database. Any change is instantly reflected in the Active Record objects. The mapping that binds a given Active Record class to a certain database table will happen au
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く