one to one(関連) ; Rails ; Design
Rails 書留レベル
one to one をどうやって実現するか
Subject - Page 関連
generate model
$ rails g model Subject name:string $ rails g model page name:string subject:references $ rake db:migrate
app/models/subject.rb
class Subject has_one :page end
app/models/page.rb
class Page belongs_to :subject, foreign_key: :subject_id end
db/seeds.rb
Subject.create! do |subject| subject.name = 'math' end
$ rake db:seed
(一部簡略化)
$ rails c > sub = Subject.find(1) >> => #<Subject id: 1, name: "math", created_at: "2014-01-26 16:05:03", updated_at: "2014-01-26 16:05:03"> > sub.page >> => nil > first_page = Page.new(name: 'first_page') >> => #<Page id: nil, name: "first_page", subject_id: nil, created_at: nil, updated_at: nil>> > first_page.subject >> => nil > sub.page = first_page >> begin transaction >> INSERT INTO "pages" ("created_at", "name", "subject_id", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Sun, 26 Jan 2014 16:22:05 UTC +00:00], ["name", "first_page"], ["subject_id", 1], ["updated_at", Sun, 26 Jan 2014 16:22:05 UTC +00:00]] commit transaction >> => #<Page id: 1, name: "first_page", subject_id: 1, created_at: "2014-01-26 16:22:05", updated_at: "2014-01-26 16:22:05"> > first_page.subject >> => #<Subject id: 1, name: "math", created_at: "2014-01-26 16:16:26", updated_at: "2014-01-26 16:16:26"> > sub.page >> => => #<Page id: 1, name: "first_page", subject_id: 1, created_at: "2014-01-26 16:22:05", updated_at: "2014-01-26 16:22:05">
参考元 # thanks
lynda.com Tutorial | Ruby on Rails 3 Essential Training—One-to-one associations - YouTube