has_one к полиморфной ассоциации - PullRequest
1 голос
/ 18 марта 2011

У меня есть следующее:

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

Т.е. у автомобиля есть один водитель с одной лицензией (лицензия полиморфная - скажем так, в этом случае она может быть связана с другими объектами).

В route.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 из-за маршрутов. Автомобиль не имеет отношения к лицензии, поэтому код не работает. Я предполагаю, что мне нужно либо сменить контроллер, либо, скорее всего, маршруты.

1 Ответ

1 голос
/ 31 марта 2011

Поскольку из URL вы получаете только car_id, это может сработать:

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

Альтернативой является использование менее вложенного интерфейса REST. Вложение не является действительно необходимым, если лицензии и автомобили имеют уникальные идентификаторы.

...