我正在制作一个乐队应用程序,其中一个场馆有许多活动和乐队通过活动。
我意识到在我创建事件的表单中只能容纳一个band_id 但是我想拥有很多乐队,因为这样做才有意义。
这是我的架构
ActiveRecord::Schema.define(version: 20170817180728) do
create_table "bands", force: :cascade do |t|
t.string "name"
t.string "genre"
t.string "image"
t.boolean "explicit_lyrics"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "events", force: :cascade do |t|
t.string "name"
t.text "date"
t.boolean "alcohol_served"
t.string "image"
t.integer "venue_id"
t.integer "band_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "venues", force: :cascade do |t|
t.string "name"
t.string "city"
t.string "state"
t.boolean "family_friendly"
t.string "image"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
这些是我的模特
class Venue < ApplicationRecord
has_many :events
has_many :bands, through: :events
end
class Event < ApplicationRecord
belongs_to :venue
belongs_to :band
end
class Band < ApplicationRecord
has_many :events
end
我对rails很新,这是一个练习网络应用程序。我希望能够在我的活动中显示多个band_ids。
我会不断在我的表单中重复t.band_id?
答案 0 :(得分:0)
您需要在迁移中指定外键关系,以反映您使用belongs_to
而非数据类型在模型中设置的Active Record关联。通过这种方式,您将获得从一个表到另一个表的引用,或者在您的情况下,从一个表到另外两个表的引用,这就是如何设置一个具有两个一对多关系的表。
class CreateEvents < ActiveRecord::Migration
def change
create_table :venues do |t|
t.string :name
t.string :city
t.string :state
t.boolean :family_friendly
t.string :image
t.timestamps
end
create_table :bands do |t|
t.string :name
t.string :genre
t.string :image
t.boolean :explicit_lyrics
t.timestamps
end
create_table :events do |t|
t.belongs_to :venue, index: true # Look here!
t.belongs_to :band, index: true # and here!
t.string :name
t.text :date
t.boolean :alcohol_served
t.string :image
t.timestamps
end
end
end