如何在rails中向表中显示多个id

时间:2017-08-20 21:17:42

标签: ruby-on-rails sqlite

我正在制作一个乐队应用程序,其中一个场馆有许多活动和乐队通过活动。

我意识到在我创建事件的表单中只能容纳一个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?

1 个答案:

答案 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