前に作ったtest003(チュートリアル(2))を使います。
songというテーブルを作って、userテーブルで読み込みます。
まずはmodelの作成
ruby script/generate model song
XXXXXX_create_songsを編集します。
class CreateSongs < ActiveRecord::Migration
def self.up
create_table :songs do |t|
t.column :song_name, :string # 曲名
t.column :artist_name, :string # アーティスト
t.column :song_url, :string # URL
t.timestamps
end
end
def self.down
drop_table :songs
end
end
次はymlの編集。フィクスチャファイルsongs.ymlをdb>fixtures>decelopmentに作ります。
# 開発環境のためのフィクスチャ: songs
one:
id: 1
song_name: test1
artist_name: さとう # アーティスト
song_url: http://google.co.jp # URL
created_at: <%= Time.now.strftime("%Y-%m-%d %H:%M:%S") %>
updated_at: <%= Time.now.strftime("%Y-%m-%d %H:%M:%S") %>
two:
id: 2
song_name: test2
artist_name: やまだ # アーティスト
song_url: http://google.co.jp # URL
created_at: <%= Time.now.strftime("%Y-%m-%d %H:%M:%S") %>
updated_at: <%= Time.now.strftime("%Y-%m-%d %H:%M:%S") %>
three:
id: 3
song_name: test3
artist_name: すずき # アーティスト
song_url: http://google.co.jp # URL
created_at: <%= Time.now.strftime("%Y-%m-%d %H:%M:%S") %>
updated_at: <%= Time.now.strftime("%Y-%m-%d %H:%M:%S") %>
完成したら
rake db:initialize
では、連携させましょう。
app>modelsの中のuser.rbとsong.rbをそれぞれ編集します。
user.rb
class User < ActiveRecord::Base
belongs_to :song
end
song.rb
class Song < ActiveRecord::Base
has_many :users
end
belopgs_toで、そのデータベースからは1つのデータとしか対応していないことを表し、has_manyで複数のデータと対応していることを示します。
song対userが1対多の関係になっています。1対1ではないのは、同じ曲を聴いている人もいるからです。
しかし、これだけではまだまだ。外部キーというものをテーブルの中につくって、ようやくテーブルからテーブルへデータを引き渡せるのです。
マイグレーション用のモデル、XXXXXXXX_create_users.rbを編集して、外部キーを新しく設けます。
t.column :listening_song, :string
ここを消して、
t.column :song_id, :integer # 外部キー
これを代入します。
これでuserを通してsongのデータベースを引っ張って来れるようになりました。
最後にviewの編集です。
といってもこれまで
@user.listening_song
と記述していた所を、@user.song.song_name
と変えるだけです!テーブル名.テーブル名.フィールド名でデータを持って来れるという簡単さ!!!!
0 件のコメント:
コメントを投稿