railsの正規化
- 作者: Bill Karwin,和田卓人(監訳),和田省二(監訳),児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (35件) を見る
さて、表題の件、自分のrailsプロジェクトを正規化したいなぁーとおもいまして。
statusテーブル id name 1 hoge 2 fuga issueテーブル id name status_id 1 hoge 1
とかやりたいわけです。statusを文字列で持ちたくないし、statusの一覧をサクッと列挙したい。
redmineのソース読んだらそのものズバリがありました。
class Issue < ActiveRecord::Base belongs_to :status,foreign_key: :status_id end
でOK。簡単ですね。もっとrails使いこなしたいものです。
使い方は
[root@xxxx xxxx]# rails c Loading development environment (Rails 4.0.1) irb(main):002:0> i = Issue.find 1 Issue Load (0.2ms) SELECT `issues`.* FROM `issues` WHERE `issues`.`id` = 1 LIMIT 1 => #<Issue id: 1, name: "hoge", status_id: 2, created_at: "2013-12-05 15:08:16", updated_at: "2013-12-05 15:09:34"> irb(main):003:0> s = Status.create!(name: "50%") (0.1ms) BEGIN SQL (0.2ms) INSERT INTO `statuses` (`created_at`, `name`, `updated_at`) VALUES ('2013-12-05 15:18:07', '50%', '2013-12-05 15:18:07') (40.0ms) COMMIT => #<Status id: 3, name: "50%", created_at: "2013-12-05 15:18:07", updated_at: "2013-12-05 15:18:07"> irb(main):004:0> i.status Status Load (0.3ms) SELECT `statuses`.* FROM `statuses` WHERE `statuses`.`id` = 2 ORDER BY `statuses`.`id` ASC LIMIT 1 => #<Status id: 2, name: "100%", created_at: "2013-12-05 15:09:08", updated_at: "2013-12-05 15:09:08"> irb(main):005:0> i.status = s => #<Status id: 3, name: "50%", created_at: "2013-12-05 15:18:07", updated_at: "2013-12-05 15:18:07"> irb(main):006:0> i.save (0.1ms) BEGIN SQL (0.2ms) UPDATE `issues` SET `status_id` = 3, `updated_at` = '2013-12-05 15:18:29' WHERE `issues`.`id` = 1 (29.6ms) COMMIT => true
ですです。では。