Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
もくじ もくじ migrationのときにstring型のidを使いたいとき テーブル名を単数形にしたい場合 マイグレーション ActiveRecord migrationのときにstring型のidを使いたいとき Ruby on Rails で rails generate migration <マイグレーションクラス名> ってしたあとにファイルにテーブル定義を書いていく事を考えます。このとき、デフォルトのままだとint型でauto incrementかつprimary keyなidという属性が勝手に追加されますが、必ずしもそのようなidを使いたくない場合もあるでしょう。例えば、string型のidを使いたい場合の定義はこうです。 とりあえずマイグレーションクラスを生成します。 rails generate migration CreateChampion マイグレーションクラス名は何で
Rails5.1にてPostgreSQLとMySQLのActiveRecordのPrimaryKeyの型がIntegerからBigintに変更されました。 PullRequest Rails 5.1 Release Note https://railsguides.jp/5_1_release_notes.html#active-record-%E4%B8%BB%E3%81%AA%E5%A4%89%E6%9B%B4%E7%82%B9 9.3 主な変更点 主キーのデフォルト型をBIGINTに変更 (Pull Request) (英語のリリースノート) http://guides.rubyonrails.org/5_1_release_notes.html#active-record-notable-changes なぜBigintからintegerに戻すのか 新規のRails Project
t.column :update_date, 'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP' 2016/7/28 追記 rails5だと下記でいけるっぽい こちらの記事より t.datetime :update_date, default: -> { 'NOW()' } 2016/7/28 追記ここまで 経緯 update_atとは別の用途で必要となったupdate_dateカラムには 「デフォルトは自動でレコード追加日が入るようにする。」 という定義のもと、もともとmigrationに t.datetime :update_date, default: DateTime.now って書いてあって、db:migrate流して「show create table」すると `update_date` datetime DEFAULT '2016-07
MySQLには文字列の照合順序(collation)というのがあって、MySQL側でのcharset utf8のときのデフォルトの照合順序はutf8_general_ciです。 ActiveRecord::Migrationでは明示的に照合順序を指定しない場合、charset utf8で照合順序utf8_unicode_ciのデータベースを作成しますが、これは少なくとも日本語圏では多くの人が期待する挙動ではないと思われるので注意が必要です。 たとえば、以下のようなファミリーテーブルをrake db:migrateすると # coding: utf-8 class CreateFamilies < ActiveRecord::Migration def change create_table :families do |t| t.string :name t.string :relation
ActiveRecordを使っていてunionしたいパターンができたので、やってみようと思ったら、思いの外ハマってしまったので情報共有したいと思います。 ActiveRecordにunionというメソッドがあることを知った私は、これでできるんじゃないの?と思って意気揚々と使ったのですが、なぜかエラーがおきました。 union = MyGroup.where(user_id: user).reorder(nil).union( MyGroup.limited.where(user_id: user.members).reorder(nil) ) MyGroup.from(MyGroup.arel_table.create_table_alias(union, :my_groups).to_sql) PG::ProtocolViolation: ERROR: bind message supp
class User < ActiveRecord::Base has_many :items end +----+--------+-----+ | id | name | age | +----+--------+-----+ | 1 | user01 | 10 | | 2 | user02 | 20 | | 3 | user03 | 30 | +----+--------+-----+ class Items < ActiveRecord::Base belongs_to :user end +----+---------+----------------------+-----------+ | id | user_id | content | published | +----+---------+----------------------+-----------+ | 1 |
はじめに 前回に引き続き、またまたDBネタです(^o^) 前回:Railsエンジニアなら最低限これだけは知っておきたいSQLのJOINの動き 今回は、インデックスについてです。インデックスにはいくつか種類がありますが、 RDBで一般的に使われるB-treeインデックスについて書いていきます。 いきなりですが、インデックスは深い!かなり深い!バイカル湖くらい深いです。 ある程度の指針的なものはありますが、インデックスをどう設計するかの見極めは状況によって変わってくるようです。クエリの実行頻度、テーブルサイズ、カーディナリティ(カラム内のデータの種類の多さ)などなど。。 なので今回は、こんなときはインデックス作成を検討した方がいいというパターンだけザッとまとめる感じで行きたいと思います。 なお、今回の記事作成にあたっては、以下の本を参考にさせて頂きました。 そもそも的なところから分かりやすく書
はじめに 先日、アソシエーション関係がある2つのテーブルから、N+1問題を考慮しつつ、特定条件でデータを抽出して表示したいことがありました。 しかし、ActiveRecordの検索メソッド(includes、joins、eager_load、references等)も結構色々あって、 「どれを使えばいいんじゃーー!!」と噴火寸前になりましたので、復習と備忘録を兼ねて整理してみます。 言及しないこと 今回はシンプルに動きだけを確認することを目的としていますので、細かなところは記載しません。 本記事の最後に参考リンクを記載しますので、他の方の記事を参考にしてもらえばと思います。(´ε` ) 環境 ruby ruby 2.3.1p112 (2016-04-26 revision 54768) activerecord (5.0.1) sqlite3 (1.3.13) 前提条件 モデル(テーブル)
今回はSinatra(シナトラ)についてです. シナトラと言っても,フランク・シナトラではありません.(歳がばれますね) 普段, 何気にRailsを使用しています. 自分で書くコード量も少なく,ほとんどフレームワークがやってくれますが,ちょっとしたWebサイトを作成するだけでも,Gemやらファイルやらで,かなりのビッグサイズになってしまいます. そんな,Railsのような巨大なフレームワークを使う程でもない,データベースの保守などのちょっとしたサイトを構築したい,でも,PHPではなく,あくまでもRubyで,しかもActiveRecordのようなデータベースマッパーや,ERBのようなテンプレートを利用したい,というような場合に最適なWebフレームワークが... Sinatraです. 今回は,このSinatraのフレームワークを使って,SQLiteデータベースのテーブルのレコードの表示,登録,
Rails ActiveRecordで複数のカラムに対して一意制約を設ける。複合一意制約 複数のカラムの組み合わせがユニークであってほしい場面に遭遇しました。 例えば、Siteテーブル Keywordテーブルが存在する時、 Keywordテーブルにある site_id と name そして date の組み合わせはユニークでなければいけない状況でした。 site_id, name, date の組み合わせがユニーク この組み合わせのユニークを担保するために、Railsアプリケーション側でユニークであることを確認するvalidate処理を設けて解決させました。 class Keyword < ActiveRecord::Base validates :site_id, uniquness: { scope: [:name, :date] } end 上記の様に書くことで、データのinsert
背景 railsではrails g scaffoldなどでModelを作成すれば、 自動的にidが付与されます。 しかもprimary_keyでauto_incrementでかつindexも張られるので、 普段はidを気にする必要はありません。 railsを使い、自分でデータ構造を決める場合はrailsの流儀に則った方が楽で、問題も起こりません。 しかし、古いデータを活用した場合、流儀にそぐわない事もあり得ます。 今回は規約に沿わない場合の対応について大きく分けて2つの場合について説明します。 なお環境は以下の物で検証しています。 * ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0] * Rails 4.0.0 * composite_primary_keys (6.0.0) 主キーがidではない 主キーがid
railsを既存アプリケーションのDBにつないで開発 PHPアプリケーションをrailsに一部のせかえる事にしました。 エゴです。えぇ、、、完全なエゴです。効率を考えると全くエゴではないかもしれません。それでもエゴです。 require ruby 2.0rails 4.0rails project作る$ gem install rails $ rails new hoge -T --skip-bundle その他最初にやる作業等(rails template作らないとなぁ、、、)をごにょごにょとします。 dbつくってつなぐまず、DBにつなぎます Gemfile gem 'mysql2' database.ymlをよしなに設定 development: adapter: mysql2 encoding: utf8 database: my_db_name username: root pas
環境 osx10.9.1 ruby2.0.0 rails4 MySQL5.6.x 経緯 既にMySQL上に存在するtableを使ってrailsしてみた。 MySQLと接続する 下のサイトを参考にして、database.yamlを定義。 - development: adapter: mysql2 encoding: utf8 database: my_db_name username: root password: root host: localhost pool: 5 timeout: 5000 参考サイト http://threetreeslight.com/post/61834000065/rails-db MySQL上のテーブルからscheme.rbを生成する。 rake environment -v -t RAILS_ENV=development db:schema:dump
Railsではバリデーション(Validation)という仕組みがあります。 フォームなどでユーザーからの入力値をDBに保存する前にその値が正しいものかモデル層で(システムとして許可している値か)を検証する仕組みです。 バリデーションの基本的な流れ、バリデーションの定義とバリデーションのテスト方法、バリデーションのスキップなどのバリデーションの基本についてまとめました。 動作確認 Rails 4.1 ActiveRecord 4.1 shoulda-matchers 2.6.3 目次 1. Railsでのバリデーションの流れ 2. バリデーションを定義する 2.1. 存在チェック(presence) 2.2. 一意性(ユニーク制約)のチェック(uniqueness) 2.3. 長さのチェック(length) 2.4. フォーマットのチェック(format) 2.5. 数値の値チェック(nu
オブジェクトがDBに保存される前に、そのデータが正しいかどうかを検証する仕組みをバリデーションといいますが、 RailsでActiveRecordを使ってそれを実現するにあたってよく使いそうなのをまとめます。 以下のメソッドにおいてはバリデーションがトリガされます。 create create! save save! update update! 以下のメソッドにおいてはバリデーションはスキップされます。 decrement! decrement_counter increment! increment_counter toggle! touch update_all update_attribute update_column update_columns update_counters Railsでのバリデーショントリガ Railsではvalid?メソッドを実行するとバリデーションが実
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く