2011-03-18 4 views
1

Je donne les résultats suivants:has_one à une association polymorphique

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 

c.-à-voiture a un conducteur qui a une licence (licence est polymorphes - disons que dans ce cas, car il peut être associé à d'autres objets) .

Dans routes.rb J'ai:

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

Je voudrais montrer ma licence. Le « show » dans le fichier des itinéraires est:

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

Dans mon contrôleur de licences Je:

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

Le problème est que même si conducteur a la relation de licence, le @licensable vient à travers comme voiture à cause des routes. Car n'a pas de relation avec la licence, donc le code ne fonctionne pas. Je suppose que je dois soit changer mon contrôleur ou plus probablement mes itinéraires.

Répondre

1

Parce que de l'URL que vous obtenez seulement le car_id cela pourrait fonctionner:

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

Une alternative est d'utiliser une interface REST moins imbriqué. L'imbrication n'est pas vraiment nécessaire si les licences et les voitures ont des ID uniques.

Questions connexes