没有嵌套路线的关联模型

时间:2013-06-19 17:53:38

标签: ruby-on-rails ruby-on-rails-3.2

我有两种模式:

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

class Garage < ActiveRecord::Base  
  belongs_to :garage_owner
end

如果没有车库所有者,车库就不应该存在。所以在new的{​​{1}}行动中,我需要相应的车库所有者。我不想使用嵌套路由,所以我没有车库所有者ID作为参数。但是我如何得到他呢?

更新一些澄清

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

我使用Admin构建我的路线:

resources

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

  2. 创建自定义路线match "/Garages/new/:owner_id" => "garages#new",然后在您的控制器中通过params[:owner_id]访问所有者的ID。

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

答案 2 :(得分:1)

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

答案 3 :(得分:-2)

我发现了一个合适的解决方案,我认为这仍然是宁静的。我刚为车库创建了多条路线:

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

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

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