Я хотел знать, как лучше всего реализовать следующее:
Пользователи могут создать
Post
, и каждое сообщение будет связано с городом и штатом США.Я хотел иметь форму, в которой есть раскрывающийся список, в котором пользователь может выбрать
State
и выбрать соответствующийCity
, например: [Голливуд] [Калифорния].
Я установил модели State
и City
.
Государственная модель:
# == Schema Information
#
# Table name: states
#
# id :integer not null, primary key
# name :string default(""), not null
# short :string default(""), not null
# created_at :datetime not null
# updated_at :datetime not null
#
class State < ApplicationRecord
has_many :cities
end
Модель города:
# == Schema Information
#
# Table name: cities
#
# id :integer not null, primary key
# name :string
# state_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_cities_on_state_id (state_id)
#
class City < ApplicationRecord
belongs_to :state
end
С моделью Post
# == Schema Information
#
# Table name: posts
#
# id :integer not null, primary key
# title :string default(""), not null
# body :string default(""), not null
class Post < ApplicationRecord
end
С моделью Post
я думал, что буду использовать ассоциацию belongs_to
и has_many
с настройкой ссылок/внешнего ключа, например:
class Post < ApplicationRecord
belongs_to :city
belongs_to :state
end
class City < ApplicationRecord
belongs_to :state
has_many :posts
end
class State < ApplicationRecord
has_many :cities
has_many :posts
end
Представление будет использовать form_for
с grouped_collection
для городов и collection
для штатов, но я не думаю, что это хорошая реализация, потому что:
- Выбор
city
уже в качестве ассоциации с государством. Кажется излишним, когда пользователь выбирает обе модели? - Выпадающий список загрузит 60000 записей городов и замедлит работу браузера.
Я хотел знать, подойдет ли ассоциация Polymorphic
для моего варианта использования и может ли кто-нибудь направить меня в правильном направлении.
Мои мысли: я подумал о том, что пользователь выбирает State
в раскрывающемся списке, например. Калифорния, но вводит город в text field
и если город не существует в таблице Cities
создает его, иначе будет ссылка на него?
Спасибо за вашу помощь.