[解決済み] Railsのハッシュアンドベローズ・マイグレーション
質問
2つのモデル
restaurant
と
user
で、has_and_belongs_to_manyのリレーションシップを行いたい。
すでにモデルファイルには
has_and_belongs_to_many :restaurants
と
has_and_belongs_to_many :users
この時点でRails 3と同じようなことができるはずだと推測しています。
rails generate migration ....
を作成することができますが、私が試したすべてが失敗しているようです。私はこれが本当に単純な何かであると確信しています私はrailsに新しいので、私はまだ勉強しています。
どのように解決するのですか?
を持つ別の結合テーブルを追加する必要があります。
restaurant_id
と
user_id
(主キーなし)の場合
アルファベット順
.
まずマイグレーションを実行し、生成されたマイグレーションファイルを編集します。
Rails 3
rails g migration create_restaurants_users_table
Rails 4 :
rails g migration create_restaurants_users
Rails 5
rails g migration CreateJoinTableRestaurantUser restaurants users
からの ドキュメント :
が名前の一部である場合、ジョインテーブルを生成するジェネレータもあります。 が名前の一部である場合、結合テーブルを生成するジェネレータもあります。
マイグレーションファイル(
:id => false
に注意してください。それが主キーの作成を妨げているのです)。
Rails 3
class CreateRestaurantsUsers < ActiveRecord::Migration
def self.up
create_table :restaurants_users, :id => false do |t|
t.references :restaurant
t.references :user
end
add_index :restaurants_users, [:restaurant_id, :user_id]
add_index :restaurants_users, :user_id
end
def self.down
drop_table :restaurants_users
end
end
Rails 4
class CreateRestaurantsUsers < ActiveRecord::Migration
def change
create_table :restaurants_users, id: false do |t|
t.belongs_to :restaurant
t.belongs_to :user
end
end
end
t.belongs_to
は必要なインデックスを自動的に作成します。
def change
はフォワードまたはロールバックのマイグレーションを自動的に検出し、アップ/ダウンは必要ありません。
Rails 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
注意: create_join_table のパラメータとして渡すことができるカスタムテーブル名のオプションとして、以下のようなものがあります。
table_name
. から
ドキュメント
デフォルトでは、結合テーブル名は に提供された最初の2つの引数をアルファベット順に並べたものです。 をアルファベット順に並べたものです。テーブルの名前をカスタマイズするには、:table_nameオプションで指定します。 オプションを指定してください。
関連
-
[解決済み】コントローラでJSONをレンダリングする
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Rails DBの移行 - テーブルを削除するには?
-
[解決済み] Ruby on RailsのActiveRecordのマイグレーションで、長すぎるインデックス名を処理するには?
-
[解決済み】Ruby on Railsはモデルのfield:typeを生成します - field:typeのオプションは何ですか?
-
[解決済み】Django Southでの後方移行について
-
[解決済み】Rails: モデルがすでに存在するときに`rails generate scaffold`を実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] デバイスを使用する現在のユーザーメソッド
-
[解決済み] Rails のインストールに失敗する: activesupport には Ruby のバージョン >= 2.2.2 が必要です。
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] Oauth2 Instagram API "リダイレクトURIが登録されたリダイレクトURIと一致しない"
-
[解決済み] railsアプリケーションでCookieのオーバーフロー?
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] RubyとRailsの "Date.today "フォーマット