我正在设置一个Ruby on Rails应用程序,其中User将拥有一个Album集合。我最初的想法是设置一个简单的用户has_many专辑和专辑属于用户。这里出现的问题是Album表将有重复条目,仅由user_id区分。
header.php
那么什么是最好的行动方案,所以我可以拥有一张包含所有独特专辑的专辑表?
答案 0 :(得分:3)
您可以使用连接表对其进行建模:
class Album < ActiveRecord::Base
has_many :user_albums
has_many :users, through: :user_albums
end
class User < ActiveRecord::Base
has_many :user_albums
has_many :albums, through: :user_albums
end
class UserAlbum < ActiveRecord::Base
belongs_to :user
belongs_to :album
end
所以,你的架构有点像这样:
create_table "albums", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "user_albums", force: :cascade do |t|
t.integer "user_id"
t.integer "album_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "email"
t.string "first_name"
t.string "last_name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
现在,您可以在控制器或控制台中调用此代码。你可以这样做:
user = User.create(params)
album = Album.find_or_create_by(params)
user.albums << album
&amp;然后按user.save
现在查看用户的相册。你可以做:
User.take.albums
要查看特定相册的用户,您可以这样做
Album.take.users
希望这能回答你的问题。
有关更多信息,请查看导轨指南: http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association