1

私には2つのモデルがあります:Booksそしてpages典型的な1対多の関係にあります。

どうすれば次のことができますか

page_path(@page)

このパスを出力します。

bookname/page/pageid

それ以外の

page/pageid

to_paramをオーバーライドすると、次localhost/page/bookid/pageidのようなパスを作成することしかできませんが、それは私が望むものではありません。

4

3 に答える 3

2

必要なものを正確に取得できるかどうかはわかりませんが、次のように、ページをブックの下にネストされたリソースにすることができます。

resources :books do
  resources :pages
end

次に、次のようになります。

localhost/book/bookid/page/pageid

次に、`to_param'をオーバーライドして以下を取得できます。

localhost/book/bookid-bookname/page/pageid

于 2012-11-20T15:58:08.560 に答える
1

パスを/:book_name / page /:idにするつもりだと思います

ルート.rb内:

match '/:book_name/page/:id' => "page#show", :as => :page

コントローラでは、params [:id]にアクセスしてpage.idを取得し、params [:book_name]にアクセスして本の名前を取得します。

于 2012-11-20T16:09:18.577 に答える
0

application_helper.erbパスヘルパーを完全に制御するには、ファイル内のヘルパーをオーバーライドする必要があることを発見しました。次のコードは私のために働いた:

def pages_path(@page)
  @bookpath = Book.find(@page.book_id)
  @bookpath + '/page/' + @page.id
end

ヘルパーはパスを作成するだけです。それでも、の特定のアクションにリンクする必要がありますroutes.rbpagesリソースをリソース内にネストすることもできbooksます。唯一重要なことは、上記のヘルパーによって生成されたパスは、railsアプリケーションによって認識可能でなければならないということです。

于 2012-11-20T17:24:57.760 に答える