Rails正解です。最初にCityモデルとOrganizationを作成します。次に、OrganizationにCityを持たせたいです...これは、 has_many
とhas_one
の関連付け。その後、rake db:migrate
を実行します。しかし、どういうわけか、データベースモデルにフィールドcity
またはcity_id
を作成しません。これを自分で行う必要がありますか?Railsデータベースに外部キー制約を作成するべきではありませんか?
それが機能したかどうかを確認するには、Rails c
を使用して、Organisation
と入力します。答えは次のとおりです。
=> Organisation(id: integer, name: string, description: string, url: string, created_at: datetime, updated_at: datetime)
私のばかげた質問を許してください...私はRailsの初心者ですが、すべてがまだ非常に馴染みがありません。
ありがとう!
市:
class City < ActiveRecord::Base
has_many :organisations
end
組織:
class Organisation < ActiveRecord::Base
has_one :city
end
都市の作成:
class CreateCities < ActiveRecord::Migration
def change
create_table :cities do |t|
t.string :name
t.string :country
t.timestamps
end
end
end
組織の作成:
class CreateOrganisations < ActiveRecord::Migration
def change
create_table :organisations do |t|
t.string :name
t.string :description
t.string :url
t.timestamps
end
end
end
これにはいくつか問題があります。
belongs_to
またはhas_many
アソシエーションの反対側でhas_one
を指定する必要があります。 belongs_to
アソシエーションを定義するモデルは、外部キーが属する場所です。
したがって、組織がhas_one :city
の場合、都市はbelongs_to :organization
する必要があります。または、都市がhas_one :organization
の場合、組織はbelongs_to :city
する必要があります。
セットアップを見ると、City
モデル内にbelongs_to
定義が必要なようです。
移行はモデル定義に基づいて構築されていません。代わりに、それらはdb/migrations
フォルダーから構築されます。 Rails g model
コマンド(またはRails g migration
)を実行すると、移行が作成されます。外部キーを取得するには、ジェネレータにそれを作成するように指示する必要があります。
Rails generate model organization name:string description:string url:string city_id:integer
または
Rails generate model city name:string description:string url:string organization_id:integer