私が達成しようとしているのは、Github のルートの方法に似たものです。たとえば、'question' という名前のプロジェクトがあると、URL は /hjuskewycz/question になります。したがって、私の目標は、最初のセグメントがユーザー名で、2 番目がプロジェクトの名前であるルートを持つことです。
私はいくつかの異なるアプローチを試しましたが、これは私が今行き詰まっているものです:
scope ":username" do
resources :projects, :path => "" do
resources :pictures
end
end
使用する
project_path :username => project.owner.username, :id => project.to_param
期待どおりに動作します。ただし、ユーザー名は常に所有者のユーザー名ですが、常にユーザー名を指定するのは面倒です。私は非常に好むだろう
project_path(:id => project.to_param)
私は default_url_options と url_for について知っていて、コードを掘り下げました。ただし、polymorphic_url は default_url_options を使用しません。
私はroutes.rbで試しました:
resources :projects, :path => "", :defaults => {:username => Proc.new { "just_testing" }}
制約にprocを使用できますが、それも機能していないためです。
project.rbで試しました
def to_param
"#{owner.username"/#{project.title}"
end
私はすでにこの問題に多くの時間を費やしており、現在のアプローチでは便利な方法を使用して :username パラメーターを追加しています。とはいえ、エントリを追加するためだけにこの方法を至る所で使用するのは悪臭 (悪いコードの臭い) だと思います。この問題に対するよりエレガントな解決策があるのではないかと思います。