0

我有两个模型:

class GarageOwner < ActiveRecord::Base  
  has_many :garages, dependent: :destroy
end

class Garage < ActiveRecord::Base  
  belongs_to :garage_owner
end

没有车库所有者,车库永远不应该存在。所以在new行动中GaragesController我需要相应的车库主人。我不想使用嵌套路由,所以我没有车库所有者 ID 作为参数。但是那我怎么得到他呢?

更新一些澄清

车库由第三个模型 ( Admin) 创建。所以我无法通过当前用户访问车库所有者。

我使用以下方法构建路线resources

       garage_owners GET    /garage_owners(.:format)          garage_owners#index
                     POST   /garage_owners(.:format)          garage_owners#create
    new_garage_owner GET    /garage_owners/new(.:format)      garage_owners#new
   edit_garage_owner GET    /garage_owners/:id/edit(.:format) garage_owners#edit
        garage_owner GET    /garage_owners/:id(.:format)      garage_owners#show
                     PUT    /garage_owners/:id(.:format)      garage_owners#update
                     DELETE /garage_owners/:id(.:format)      garage_owners#destroy
             garages GET    /garages(.:format)                garages#index
                     POST   /garages(.:format)                garages#create
          new_garage GET    /garages/new(.:format)            garages#new
         edit_garage GET    /garages/:id/edit(.:format)       garages#edit
              garage GET    /garages/:id(.:format)            garages#show
                     PUT    /garages/:id(.:format)            garages#update
                     DELETE /garages/:id(.:format)            garages#destroy
4

4 回答 4

2

不使用嵌套路由的解决方案是garage_owner_id在新车库表单中插入隐藏字段。但是,您在您的问题中没有说明新的车库表格是如何知道garage_owner它应该与哪个相关联的,所以我不能给您一个具体的例子。

于 2013-06-19T18:56:47.977 回答
1

你可以通过几种不同的方式来解决这个问题:

  1. 如果GarageOwer需要登录,您可以GarageOwer从登录时存储的 cookie 中获取用户 ID。

  2. 创建一个自定义路由match "/Garages/new/:owner_id" => "garages#new",然后在您的控制器中通过params[:owner_id].

  3. 在“车库/新”页面上添加owner_id为表单的隐藏属性。

于 2013-06-19T18:04:45.713 回答
1

也许我没有收到您的问题,但我认为您必须从您的会话中选择车库所有者(例如登录用户),或者从您的会话中的值或作为与表单提交的值中获取的东西用于新操作,在这种情况下,它将是一个参数。

于 2013-06-19T18:04:53.063 回答
-2

我找到了一个合适的解决方案,我认为它仍然很安静。我刚刚为车库创建了多条路线:

resources :garage_owners do
  resources :garages, except: :index
end

resources :garages, only: [:index, :show]

普通用户不应访问其他操作。

于 2013-06-20T14:08:21.023 回答