【发布时间】:2018-04-19 16:38:27
【问题描述】:
我有一个 Rails 模型 Region 用于我访问过的地区。 Region 与 Location 模型具有一对多关联,其中包含我在该区域内访问过的特定位置。
每个区域都有一个name 字符串列。我的路由设置为使用给定的Region.name 来形成大多数 URL - 例如/:name/new_location。这是出于审美原因,因为我不希望使用数字(region_id)来构成 URL。
因此,对于我添加到区域的每个新位置,都需要分配一个 region_idforeign_key。现在我通过在我的Location 中有一个region_name 列来做到这一点。然后,我的new 位置表单有一个字段“区域名称”,其中输入了一个字符串。
要真正将新创建的location 与其region 关联起来,我的locations_controller 中的create 方法包含一段代码如下:
# CONVERT REGION_NAME TO REGION_ID
location = Location.new
l = location.region_name.downcase
if l == "chicagoland"
location.region_id = 3
elsif l == "roadtrip 2016"
location.region_id = 4
#...
end
location.save
redirect_to("/regions/#{region.name}/#{location.id}")
因此,对于我创建的每一个新 region,在我手动将其字符串名称与其id 连接之前,我无法添加新位置 - 通过在我的locations_controller 中向create 方法添加新代码。因此,如果我使用id = 28 创建一个名为“Algonquin 省立公园”的新区域,我需要更新我的locations_controller - 将"algonquin provincial park" 连接到28,并将location.region_id 设置为28。这显然不是最优的。
有没有办法对我的new 和create 方法进行编程,以便自动为新的location 分配一个与它所属的region 的region_id 等效的foreign_key,而无需添加代码每次有新的region 时我的Location create 方法?
【问题讨论】:
标签: ruby-on-rails model-associations