# 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
複数のモデルにステータスなどの共通した値と処理を持たせたい!と思ってRails4.1のenumを使いつつ、concernなmoduleに切り出そうと思ったら、enumはActiveRecord所属だったので、困ってしまったときのメモ。 しょうがないので、ActiveRecordを継承したクラスを作ってそこに処理をまとめようとした。 class StatusRecord < ActiveRecord::Base before_create :set_status enum status: {draft: 0, published: 1} private def set_site self.status = some_helper_method end end class Article < StatusRecord ~snip~ end そしたら、statusってテーブルがねーよッ、というニ
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 細かい説明は抜きにして、以下のirb (rails console -s で起動するコンソールモード)での実行内容を見てみよう。 まずはUserというモデルをsaveメソッド単体で保存してみる。 [root@localhost base]# rails console -s Loading development environment in sandbox (Rails 4.0.0.beta1) Any modifications you make will be rolled back on exit irb(main):001:0> a = User.new => # irb(main):002:0> a.user_no = "123" => "123" irb(main)
I would like to have a list of all attribute names that can be mass assigned. I need this for a custom form builder that will not add input fields by default that cannot be mass assigned. For example if I have the following model: class Post < ActiveRecord::Base attr_protected :account belongs_to :author validates_presence_of :title, :author end I would like to have as a result [:author, :title].
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 で行こう
Active Record アソシエーションのガイド(A Guide to Active Record Associations) † このガイドでは、 Active Record アソシエーション機能を説明します。 このガイドを参照することで、以下のことができるようになります: Active Record のモデル間のアソシエーションの宣言 Active Record アソシエーションの様々な種類への理解 アソシエーションの作成によってモデルに追加されるメソッドの利用 ↑ 1 何故アソシエーションなの?(Why Associations?) † 何故モデル間にアソシエーションが必要なのでしょう? それは、コード内の一般的な操作を単純で簡単にするからです。 例えば、 顧客のためのモデルと注文のためのモデルが含まれている簡単なRailsアプリケーションを考えて下さい。 各顧客は、多く
Rails4.0からadd_reference使えるようになってた. rails g migration AddPiyoToHoges piyo:refernces とかすると class AddPiyoToHoges < ActiveRecord::Migration def change add_reference :hoges, :piyo, index: true end end なファイルが出来て rails db:migrate するとdb/schema.rbで create_table "hoges", force: true do |t| t.integer "piyo_id" end add_index "hoges", ["piyo_id"], name: "index_hoges_on_piyo_id", using: :btree みたいになる. 便利. 参考 ad
前回に引き続き、サンプルアプリケーション asagao のエラーメッセージを国際化していきましょう。 member.rb に次のような記述があります。 # 値の検証 def validate if member_number and !Member.positive_integer?(member_number) errors.add(:member_number, 'は1以上の整数で記入してください。') end if !email.blank? and !email.well_formed_as_email_address? errors.add(:email, 'の書式が正しくありません。') end if birthday and !birthday.is_valid? errors.add(:birthday, 'が存在しない日付です。') end if member_image
ActiveRecord4でこんなSQLクエリどう書くの? Merge編 では、関連先のscopeを使うことができるmergeを紹介しました。mergeを使う事で、変更に強いクエリを美しく組み立てることができました。 今回は、ActiveRecord4で書きにくいSQLクエリたちを紹介します。 書きにくいクエリとは、具体的には以下のものがあげられます。 比較演算ORlikeleft outer joinunionサブクエリexists ActiveRecordでこれらのクエリを組み立てる場合、どうしても美しくない(SQL文字列をべったり書いてしまうような)書き方となってしまいがちです。 この処理を美しく書くためには、ActiveRecordだけの機能では足りず、ActiveRecordが内部で使っているArelというライブラリを使う必要がでてきます。 今回は、Arelを使って華麗にSQLク
対応するレコードがないフォームを使う場合、ActiveModelを使用することで、シンプルなビューを構築しつつ、処理はモデルにかけます。 しかし、ActiveModelのノウハウってあんまり落ちていません。 それなりに ActiveRecord に対する理解も必要で、難しいですね。 ハマったことなど共有していきたいと思います。 フォームからのデータは文字列ですが、ActiveRecord にはコラム自体には型があるため、型変換を自動的に行ってくれます。 これを無意識に使用していると ActiveModelではまります。 具体的には以下のテーブルがあったとします。 class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.integer :age t.b
One of my biggest frustrations with ActiveRecord and many other ORMs (looking at you, node-orm2) is the lack of a solid query builder to join various, dynamic query filters into a single SQL statement. It seems obvious that this should be the meat-and-potatoes of the entire query language abstraction framework, and yet there is still no clean way to build a SQL statement containing a variable co
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く