1

id 列と title 列を持つ Posts モデルがあります。

次のようにルート(レール2.3.8)を設定しました:

map.post ':title/:id', :controller => 'posts', :action => 'show'

これは、URL を認識し、明示的に生成するときに正しく機能します。

post_url(:title => 'foo', :id => 123)

これは /foo/123 として適切に出力されます。私が望むのは、電話できることです

p = Post.create!(:title => 'foo') # let's assume it gets ID 123
url_for(p)

同じパスを取得します。しかし、私はエラーが発生します:

post_url failed to generate from {:action=>"show", :controller=>"posts",
    :title=>#<Post id: 123 title: "foo" created_at: ...

名前付きルートがモデルの列の _url および _path 関数を使用するように指定するにはどうすればよいですか?

4

1 に答える 1

0

ルートを宣言するとき、それを呼び出す方法には特定の数のパラメーターが必要であり、それらを正しい順序で指定する必要があります。そうしないと混乱する可能性があります。

以下に、いくつかの典型的なルートを示します。

map.none '/', :controller => 'none', :action => 'index'
map.one '/:one_id', :controller => 'one', :action => 'show'
map.two '/:one_id/:two_id', :controller => 'two', :action => 'show'
map.three '/:one_id/:two_id/:three_id', :controller => 'three', :action => 'show'

それらを呼び出したいときは、ルートに入れたパラメーターを指定する必要があります。指定しないと無効になります。

none_path
one_path(one)
two_path(one, two)
three_path(one, two, three)

オプションのパラメータを最後に含めることができます。一般に、自動ルーティングと手動ルーティングの方法を混在させることはお勧めできません。

# Using named routes
one_path(one) # /one/1
one_path(one, :two_id => two) # /one/1?two_id=2
one_path(:one_id => one) # Awkward format for same

# Using automatic routing
url_for(:controller => 'one', :action => 'show', :one_id => one) # /one/1

のような括弧内のパス パラメータ(:format)はオプションですが、安全なデフォルトがある場合を除いて、これらは避けるのが最善です。

ルートurl_forに単純に:id.

于 2010-10-07T17:23:36.677 に答える