polymorphic_pathのパラメーターを使用して、スラッグを渡す方法はありますか?
たとえば、私は次のルートを持っています
ルート.rb
MyApp::Application.routes.draw do
match "movies/:slug" => 'movies#show', :as=>:movie
match "series/:slug" => 'series#show', :as=>:series
end
そして、私は次のモデルを持っています:
Movie.rb
class Movie < ActiveRecord::Base
has_many :cast_members, :as=>:media_item
end
Series.rb
class Series < ActiveRecord::Base
has_many :cast_members, :as=>:media_item
end
CastMember.rb
class CastMember < ActiveRecord::Base
belongs_to :media_item, :polymorphic=>true
end
これはうまく機能し、通常のhas_many / belongs_toの関係と同じように、キャストメンバーから自分の映画を参照したり、その逆を行うことができます。cast_memberビュー内からこれを行うこともできます。
* cast_members / show.html.erb *
link_to (@cast_member.movie.title, movie_path(@cast_member.movie.slug))
「movie/movie-title」を返す
そして私はすることができます
* cast_members / show.html.erb *
link_to (@cast_member.movie.title, polymorphic_path(@cast_member.media_item))
しかし、これは「/ movies/24」を返します
スラッグをアイテムとしてpolymorphic_pathに渡すことをさまざまな方法で試しました。
link_to (@cast_member.movie.title, polymorphic_path(@cast_member.media_item, @cast_member.media_item.slug))
link_to (@cast_member.movie.title, polymorphic_path(@cast_member.media_item, :slug=>@cast_member.media_item.slug))
link_to ([@cast_member.movie.title, polymorphic_path(@cast_member.media_item, @cast_member.media_item.slug]))
ただし、これらはすべてエラーまたはIDを持つパスを返します。
polymorphic_pathにidの代わりにmovie.slugを使用させるにはどうすればよいですか?