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

つまり、Carには1つのライセンスを持つ1人のドライバーがいます(ライセンスは多態的です。この場合、他のオブジェクトに関連付けることができるので、この場合だけ言いましょう)。

ルート.rbで私は持っています:

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

ライセンスを提示したいのですが。ルートファイルの「show」は次のとおりです。

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 に答える