私には2つのモデルがあります:Books
そしてpages
典型的な1対多の関係にあります。
どうすれば次のことができますか
page_path(@page)
このパスを出力します。
bookname/page/pageid
それ以外の
page/pageid
to_paramをオーバーライドすると、次localhost/page/bookid/pageid
のようなパスを作成することしかできませんが、それは私が望むものではありません。
私には2つのモデルがあります:Books
そしてpages
典型的な1対多の関係にあります。
どうすれば次のことができますか
page_path(@page)
このパスを出力します。
bookname/page/pageid
それ以外の
page/pageid
to_paramをオーバーライドすると、次localhost/page/bookid/pageid
のようなパスを作成することしかできませんが、それは私が望むものではありません。
必要なものを正確に取得できるかどうかはわかりませんが、次のように、ページをブックの下にネストされたリソースにすることができます。
resources :books do
resources :pages
end
次に、次のようになります。
localhost/book/bookid/page/pageid
次に、`to_param'をオーバーライドして以下を取得できます。
localhost/book/bookid-bookname/page/pageid
パスを/:book_name / page /:idにするつもりだと思います
ルート.rb内:
match '/:book_name/page/:id' => "page#show", :as => :page
コントローラでは、params [:id]にアクセスしてpage.idを取得し、params [:book_name]にアクセスして本の名前を取得します。
application_helper.erb
パスヘルパーを完全に制御するには、ファイル内のヘルパーをオーバーライドする必要があることを発見しました。次のコードは私のために働いた:
def pages_path(@page)
@bookpath = Book.find(@page.book_id)
@bookpath + '/page/' + @page.id
end
ヘルパーはパスを作成するだけです。それでも、の特定のアクションにリンクする必要がありますroutes.rb
。pages
リソースをリソース内にネストすることもできbooks
ます。唯一重要なことは、上記のヘルパーによって生成されたパスは、railsアプリケーションによって認識可能でなければならないということです。