【问题标题】:Capture ParentID param in nested resources在嵌套资源中捕获 ParentID 参数
【发布时间】:2014-10-28 07:10:24
【问题描述】:

我想在保存新的子记录之前捕获父 ID 参数(外键)。

我将这两个设置作为路由文件中的嵌套资源,并且指向新子控制器操作的链接显示正确嵌套的父 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 %>

【问题讨论】:

  • 请分享您的表单、控制器代码和路由文件。 :)
  • 不,不要那样粘贴。做一个要点。并仅发布特定部分。您的帖子越长,得到答复的时间就越长。
  • 我们要求得到的信息越少,我们回答的可能性就越小。
  • 我在这里比较新,不知道你是告诉我要少发、多发还是以不同的格式或位置发布?
  • @parent_id = params[:region_id] 是您访问父 ID 的方式。

标签: ruby-on-rails activerecord nested-routes


【解决方案1】:

您应该在 RegionsController 操作中使用params[:region_id],这应该会在您的路由中获取 parentId。

由于两条路线的操作相同,因此您还应该进行一些检查以了解您在范围内的位置。

所以我会建议类似的东西

class RegionController < ApplicationController def create if params[:region_id] parent = Region.find(params[:region_id]) # ... end ... end end

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2013-06-25
    • 2015-01-19
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多