1

我有以下内容:

class Car < ActiveRecord::Base
  has_one :driver
end

class Driver < ActiveRecord::Base
  belongs_to :car
  has_one :license, :as => :licensable
end

class License < ActiveRecord::Base
  belongs_to :licensable, :polymorphic => true
end

即,汽车有一个司机,他有一个执照(执照是多态的——我们只是在这种情况下说,因为它可以与其他对象相关联)。

在 routes.rb 我有:

  resources :cars do
    resource :driver do
      resource :license
    end
  end

我想出示我的执照。路由文件中的“显示”是:

GET /cars/:car_id/driver/license(.:format) {:action=>"show", :controller=>"licenses"}

在我的许可证控制器中,我有:

def show
    @license = @licensable.licenses.find(params[:id])
  # continues.......

问题是,即使司机与许可证有关系,@licensable 也会因为路线而被视为 Car。汽车与许可证无关,因此代码不起作用。我假设我要么必须更改我的控制器,要么更可能更改我的路线。

4

1 回答 1

1

因为从 URL 你只能得到 car_id 这可以工作:

@car = Car.find(params[:car_id])
@license = @car.driver.licensable

另一种方法是使用嵌套较少的 REST 接口。如果许可证和汽车都具有唯一的 ID,则实际上不需要嵌套。

于 2011-03-30T23:35:15.260 回答