我想在保存新的子记录之前捕获父Id param(外键)。
我将两个设置作为路径文件中的嵌套资源,并且指向新子控制器操作的链接显示正确嵌套的父ID。
当我输入孩子的数据并单击“创建”时,会创建记录但是我无法捕获父母的ID。
我使用嵌套集模型将表关联回自身,因此没有FK列。因为没有FK我需要在保存记录之前捕获父ID并更新另一个记录的lft&相应的rgt字段。
http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html
Rails.application.routes.draw do
resources :regions do
resources :regions
end
End
区域列表包含以下用于创建新子区域的链接:
stackoverflow不允许我发布表单字段但是我认为我的问题在于表单是在嵌套资源之前发布到@region的,这是来自脚手架。
rake路线显示以下内容:
Prefix Verb URI Pattern Controller#Action
region_regions GET /regions/:region_id/regions(.:format) regions#index
POST /regions/:region_id/regions(.:format) regions#create
new_region_region GET /regions/:region_id/regions/new(.:format) regions#new
edit_region_region GET /regions/:region_id/regions/:id/edit(.:format) regions#edit
region_region GET /regions/:region_id/regions/:id(.:format) regions#show
PATCH /regions/:region_id/regions/:id(.:format) regions#update
PUT /regions/:region_id/regions/:id(.:format) regions#update
DELETE /regions/:region_id/regions/:id(.:format) regions#destroy
regions GET /regions(.:format) regions#index
POST /regions(.:format) regions#create
new_region GET /regions/new(.:format) regions#new
edit_region GET /regions/:id/edit(.:format) regions#edit
region GET /regions/:id(.:format) regions#show
PATCH /regions/:id(.:format) regions#update
PUT /regions/:id(.:format) regions#update
DELETE /regions/:id(.:format) regions#destroy
<%= form_for(@region) do |f| %>
...
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:0)
您应该在RegionsController动作中使用params[:region_id]
,这应该在您的路线中获取parentId。
由于这两种路线的操作相同,因此您还应该进行一些检查以了解您在范围内的位置。
所以我建议类似
class RegionController < ApplicationController
def create
if params[:region_id]
parent = Region.find(params[:region_id]) #
...
end
...
end
end