Railsで1対1の関係のモデルを定義するにはhas_one
を使います。
記事モデル(Article)が画像モデル(Image)を所有する例で見ていきます。
モデル
モデルは次のようになります。has_one
でImage
モデルを所有するのがポイントです。
class
Article< ActiveRecord
has_one
:image # Imageを所有
end
class
Image< ActiveRecord
end
マイグレーション
マイグレーションは次のようになります。t.belongs_toでArticleモデルに所属するのがポイントです。
class
Init< ActiveRecord::Migration
def
change
create_table
:articles
do
|t|
t.string
:title # タイトル
end
create_table
:images
do
|t|
t.belongs_to
:article # Articleに所属
t.string
:name # 画像の名前
t.binary :file # 画像データ
end
end
end
使い方(登録)
# Article作成 article = Article.new( title: "article title" end # has_one関連にあるImageはメンバとしてアクセスできるので、メンバ経由でImageを登録 article.image = Image.new( name: "image name" ) # 最後に保存 article.save!
使い方(参照)
# 1件目のArticleを呼び出す article = Article.first # has_one関係にあるImageはメンバとしてアクセスできるので、メンバ経由でImageを参照 puts artcile.image.name